#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 итераций, что и происходит. Здесь нет ошибки.