2016-10-18 4 views
0

Итак, я пытаюсь выполнить итерацию по 4-мерному массиву объектов и задать значение каждого объекта в соответствии с пользовательским вводом, но я столкнулся с проблемой, когда итерация через массив останавливается на 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); 
      } 
     } 
    } 

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

+2

Вы создаете массив 3x2, что заставляет вас думать, что в нем должно быть 12 вещей? – azurefrog

+2

Ummmm, поле 3 на 2, а не 4 на 3. Вы смешиваете размеры массива с индексами массива? – rtpax

+2

Заблуждение на вашем конце. У вас нет массива 4x3. У вас 3x2 ... так что 6 элементов. Итак, пожалуйста: просто удалите вопрос и перейдите ;-) – GhostCat

ответ

1

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

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

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

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

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

+0

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

+0

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

+0

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

1

Вы говорите:

Так что я пытаюсь итерацию через 4 по 3 массив объектов ...

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

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

Смежные вопросы