Почему я получаю ArrayIndexOutOfBounds, когда использую -1 для выхода из цикла?

1

Я делаю карты и класс колоды. Я дошел до того, что он запрашивает у пользователя ввод номера от 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)
  • 0
    Также хотелось бы отметить, что условие цикла do-while выполняется при условии, что оно продолжает выполняться, когда оно больше или равно -1, что в данном случае должно быть> -1, потому что ровно при -1 хочу, чтобы условие больше выполнялось. Что касается, если (iNum <= -1), это будет означать, что значение меньше, чем -1 также показывает Deck (). Это предназначено?
  • 0
    Да, я хотел, чтобы оно было iNum > -1 , я еще не полностью понял логику циклов do-while .
Показать ещё 2 комментария
Теги:

1 ответ

1
Лучший ответ

Поскольку, как говорит ваш код, когда пользователь входит в -1, он продолжает делать new Card(iNum), которая является new Card(-1) (сразу после этого оператора if).

Возможно, вы имели в виду положить, что немного в else выражение, или вы могли бы также break из циклы после showDeck() вызова.


Кстати, помните, что ваша линия ломается. Способ форматирования вашего кода теперь может быть несколько запутанным. У тебя есть:

do {
   ...
}

while (iNum >= 1);
{
   ...
}

Но в while является частью do петлю, а не часть из {... } объема, который следует, что (обратите внимание, где точка с запятой). Форматирование несколько вводит в заблуждение и может легко привести к ошибкам. Возможно, вы захотите отформатировать их следующим образом:

do {
   ...
} while (iNum >= 1);

{
   ...
}

Хотя все это, похоже, немного опечатка, так как я подозреваю, что вы намеревались применить это, в while условие для "Нажмите ENTER для продолжения" также также.

  • 0
    Спасибо, что исправили. Я бросил в else после , if заявления и исправил while заявление iNum > -1
  • 0
    @ ph0bolus Вам следует ознакомиться с отладчиком, например, с Eclipse или NetBeans. Затем вы можете просмотреть код по одной строке за раз, чтобы точно увидеть, что происходит.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню