Как начать итерацию 2-го массива из 2-го ряда, например? - PullRequest
0 голосов
/ 21 июня 2019

Итак, я создал 2D-поле, которое заполняется идентификаторами по группе троек.

Есть ли способ начать итерацию, например, с 4-й строки?если да, как это делается?Вот изображение 2d поля.

enter image description here

Я пробовал для каждого цикла, но кажется, что он не будет работать правильно.

enter image description here

Это код, где я не могу понять, как получить 4-ую строку, например.

Ответы [ 6 ]

3 голосов
/ 21 июня 2019

извините, ваше изображение отсутствует, но я бы предложил что-то вроде этого, выберите индекс в цикле строки

int startRow = 2;
for (int i = startRow; i < board.length; i++) {
        for (int j = 0; j < board[i].length; j++) {
            board[i][j] = i + j;
        }
    }
3 голосов
/ 21 июня 2019

Вместо использования foreach используйте классический цикл for с начальным индексом 3. 3. 1001 *

for(i=3; i<row; i++)
   {
       for(j=0; j<col; j++)
       {
           arr[i][j] = scan.nextInt();
       }
   }
2 голосов
/ 21 июня 2019

Я думаю, что это будет работать

int mat[][] = { {10, 20, 30, 40, 50, 60, 70, 80, 90},
                {15, 25, 35, 45},
                {27, 29, 37, 48},
                {32, 33, 39, 50, 51, 89},
              };


    for(int i=3; i<mat.length; i++) {
        for(int j=0; j<mat[i].length; j++) {
            System.out.println("Values at arr["+i+"]["+j+"] is "+mat[i][j]);
        }
    }
1 голос
/ 21 июня 2019

В этой ситуации у вас есть два варианта.Традиционно вы можете использовать цикл 'for' примерно так:

for (int i=0, i<10, i++) {
  *commands here*
}

int i=0 - это ваше начальное условие, вы можете заменить 0 на индекс, с которого вы хотите начать.Помните, что индексы массива начинаются с 0, поэтому 4-й элемент будет индексом 3

i<10, управляющим тем, сколько раз вы хотите выполнить цикл, в данном случае 10 раз.

i++ как выВы хотите увеличить значение индекса

Конечно, вы можете использовать while, но циклы for в этом случае обычно лучше.Я бы посоветовал поискать их, поскольку они имеют некоторые полезные функции, которые я здесь не освещал.

Ваш второй выбор - использовать потоки:

Arrays.toStream(myArray)
   .drop(4)   // drop the first four elements
   .other processing

В некоторых случаях потоки могут быть менее «эффективными», но я считаю их более читабельными.

1 голос
/ 21 июня 2019

Да, вы можете сделать это. Начните итерацию, указав начальный цикл 3, если вы хотите начать его с 4-й строки. for(int i=3 ; i < (maximum number of rows initiated at the beginning of the array); i++)

В общем случае код может быть следующим:

for(i=the row which you want to start from; i < maximum number of rows initiated at the beginning of the array; i++){ for(j=0; j<maximum number of columns initiated at the beginning of the array; j++) { System.out.println(arr[i][j]); } }

0 голосов
/ 21 июня 2019

Если вы хотите получить только определенную строку, вы можете изменить внешний цикл на базовый цикл for, как уже упоминалось.как показано: -

    private Integer[][] comparedProducts = new Integer[][]{
            {1,2,3},
            {4,5,6},
            {7,8,9},
            {10,11,12}
    };

    for(int i=3;i<size;i++){
      for(int a:comparedProducts[i]){
        //DO work
      }
    }

Кроме того, вы можете использовать ArrayList вместо массива, а затем вы можете использовать метод subList ArrayList.

    List<List<Integer>> comparedProducts = new ArrayList<>();
    public void initialiseList(){
        comparedProducts.add(Arrays.asList(1,2,3));
        comparedProducts.add(Arrays.asList(4,5,6));
        comparedProducts.add(Arrays.asList(7,8,9));
    }


  for(List comparedProduct:comparedProducts.subList(3,comparedProducts.size()){
    // One more foreach loop for each element
    // Or do some Work.
  }

ArrayList действительно очень полезенметоды.Поэтому, если изменений не так много, используйте ArrayList.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...