Я делаю карты и класс колоды. Я дошел до того, что он запрашивает у пользователя ввод номера от 1-52, который отобразит карту, и -1, чтобы выйти из цикла. Как только петля закончится, она отобразит все 52 карты. В конце концов, я хотел бы, чтобы моя программа достигла точки, в которой пользователь вводит количество карточек, которые они хотели бы получить, и программа будет обрабатывать руку. Прежде чем я туда доберусь, я получаю ошибку ArrayIndexOutOfBounds после ввода -1. Здесь мой код,
Класс моих карт (короткий фрагмент):
public class Cards
{
private Face face;
private Suit suit;
public Cards ()
{
face = Face.ACE;
suit = Suit.SPADES;
}
public Cards (int n)
{
face = Face.values() [n % 13];
suit = Suit.values() [n % 4];
}
}
Мой водитель:
public class driver
{
public static void main(String []args)
{
Scanner kb = new Scanner(System.in); //For int
Scanner kb2 = new Scanner(System.in); //For strings
int iNum=0; //holds users input for non-negative number
String strDeck; //variable to catch showDeck
do
{
System.out.println ("Enter a number between 1-52, enter -1 to stop.");
iNum = kb.nextInt();
if (iNum <= -1)
{
strDeck = showDeck();
}
Cards userCard = new Cards(iNum);
System.out.println ("Your card is " + userCard.toString());
}
while (iNum >= -1);
{
System.out.println("Press ENTER to continue ");
kb2.nextLine();
}
Извините за проблему с интервалом, в частности, я получаю ошибку
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: -1
at cards.Cards.<init>(Cards.java:44)
at cards.driver.main(driver.java:28)
Поскольку, как говорит ваш код, когда пользователь входит в -1, он продолжает делать new Card(iNum)
, которая является new Card(-1)
(сразу после этого оператора if
).
Возможно, вы имели в виду положить, что немного в else
выражение, или вы могли бы также break
из циклы после showDeck()
вызова.
Кстати, помните, что ваша линия ломается. Способ форматирования вашего кода теперь может быть несколько запутанным. У тебя есть:
do {
...
}
while (iNum >= 1);
{
...
}
Но в while
является частью do
петлю, а не часть из {... }
объема, который следует, что (обратите внимание, где точка с запятой). Форматирование несколько вводит в заблуждение и может легко привести к ошибкам. Возможно, вы захотите отформатировать их следующим образом:
do {
...
} while (iNum >= 1);
{
...
}
Хотя все это, похоже, немного опечатка, так как я подозреваю, что вы намеревались применить это, в while
условие для "Нажмите ENTER для продолжения" также также.
else
после , if
заявления и исправил while
заявление iNum > -1
iNum > -1
, я еще не полностью понял логику цикловdo-while
.