Почему мои циклы останавливаются рано при повторении и массиве

#java #arrays

#java #массивы

Вопрос:

Итак, я пытаюсь выполнить итерацию по массиву объектов размером 4 на 3 и установить значение каждого объекта в соответствии с пользовательским вводом, но я столкнулся с проблемой, когда итерация по массиву останавливается на 6 вместо общего числа 12. Я попробовал несколько способов написания итераторов, но они всегда терпят неудачу. Это код.

 Card[][] field = new Card[3][2];
    void setvals(){
        Scanner scanner = new Scanner(System.in);
        for(int row= 0; row < field.length; row  ){
            for(int col = 0; col < field[row].length; col  ) {
                String input = scanner.nextLine();
                field[row][col] = new Card();
                field[row][col].makeCard(input);
            }
        }
    }
  

Я также пробовал <= вместо <, но тогда это дает мне индекс массива за пределами. Я понятия не имею, в чем проблема.

Комментарии:

1. Вы создаете массив 3×2, что заставляет вас думать, что в нем должно быть 12 элементов?

2. Мммм, поле 3 на 2, а не 4 на 3. Вы путаете размеры массива с индексами массива?

3. Неправильное представление с вашей стороны. У вас нет массива 4×3. Ваш 3×2… итак, 6 элементов. Поэтому, пожалуйста: просто удалите вопрос и двигайтесь дальше;-)

4. Измените это Card[][] field = new Card[3][2]; на Card[][] field = new Card[4][3];

Ответ №1:

Ваша проблема с массивом:

 Card[][] field = new Card[3][2];
  

Вы хотите, чтобы массив был 4 x 3 , затем установите размеры таким образом:

 Card[][] field = new Card[4][3];
  

Причина, по которой ваш код не работает, заключается в том, что в настоящее время у вас есть 2 x 3 массив, оцениваемый до 6 итераций. 4 x 3 Массив будет вычисляться до 12 итераций, как вы хотите.

Комментарии:

1. Спасибо. Это то, что у меня было изначально, но мой учитель сказал мне, что на самом деле это было 3X2, потому что массивы начинаются с 0. Я понимаю, как глупо это звучит сейчас, а также понимаю, что я должен с недоверием отнестись к его совету.

2. @LightningJimmyJoeJohnson Если вы нашли этот ответ правильным, пожалуйста, отметьте его правильным, щелкнув значок зеленой галочки рядом с ответом, чтобы отметить его правильным. Это делается для того, чтобы будущие пользователи, задающие этот вопрос, не задавали его снова и могли легко увидеть, что решение сработало для вас.

3. Да, я забыл, что переполнение стека продолжало говорить мне, что мне нужно подождать несколько минут, прежде чем отмечать проверку, я просто забыл об этом через некоторое время. Упс

Ответ №2:

Вы говорите:

Итак, я пытаюсь выполнить итерацию по массиву объектов размером 4 на 3…

И вот ваш массив: Card[][] field = new Card[3][2]; .

Это не массив 4×3. Это массив 3×2, что означает, что в вашем цикле должно быть 6 итераций, что и происходит. Здесь нет ошибки.