2014-09-12 4 views
4

У меня есть «подключить четыре платы», которые я имитирую с помощью массива 2d (массив [x] [y] x = x координата, y = y координата). Я должен использовать «System.out.println», поэтому мне нужно перебирать строки.Итерация через 2-мерную матрицу

Мне нужен способ итерации таким образом [0,0] [1,0] [2,0] [3,0] [0,1] [1,1] [2,1] и т. Д.

Если я использовать обычную процедуру:

for (int i = 0; i<array.length; i++){ 
    for (int j = 0; j<array[i].length; j++){ 
     string += array[i][j]; 
    } System.out.println(string) 

} 

он не работает, потому что он перебирает таким образом [0,0] [0,1] [0,2] [0,3] и т.д.

The нормальная процедура остается в x и увеличивает y до конца столбца, но мне нужно сказать в y и приращение x до конца строки.

+0

могут строки имеют разную длину? –

+0

да, они могут ... – Peter111

+0

Затем используйте массив размером y * x, это было бы более логично ... – Dici

ответ

0

Простая идея: получить длину самой длинной строки, перебирать каждую колонку, печатая содержимое строки, если она содержит элементы. В приведенном ниже коде могут быть некоторые ошибки, которые были закодированы в простом текстовом редакторе.

int longestRow = 0; 
    for (int i = 0; i < array.length; i++) { 
    if (array[i].length > longestRow) { 
     longestRow = array[i].length; 
    } 
    } 

    for (int j = 0; j < longestRow; j++) { 
    for (int i = 0; i < array.length; i++) { 
     if(array[i].length > j) { 
     System.out.println(array[i][j]); 
     } 
    } 
    } 
7

Просто инвертировать порядок индексов, как это:

for (int j = 0; j<array[0].length; j++){ 
    for (int i = 0; i<array.length; i++){ 

потому, что все строки имеют одинаковое количество столбцов, вы можете использовать это условие J < массив [0] .lengt в первом для состояния из-за факт, что вы выполняете итерацию по матрице

+1

'' 'потому что все строки имеют одинаковое количество столбцов''', которые могут быть неверными. Что делать, если он использует '' 'new int [] [] {{1,2,3}, {4,5}};' ''? –

+0

Да, это правда, что если вы используете новый int [] [] {{1,2,3}, {4,5}}; не будет работать. Но это не матрица, это массив массивов. Когда я говорю матрицу, я имею в виду математическую матрицу. – jcstar

+0

, но ОП никогда не говорил, что это матрица –

14

Рассматривайте это как массив массивов, и это будет работать точно.

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=0; 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]); 
     } 
    } 
+0

Это хороший ответ, спасибо –

1

Просто измените указатели. i и j .... в цикле, плюс, если вы имеете дело со строками, вам нужно использовать concat и инициализировать переменную до пустого сильного, иначе вы получите исключение.

String string=""; 
for (int i = 0; i<array.length; i++){ 
    for (int j = 0; j<array[i].length; j++){ 
     string = string.concat(array[j][i]); 
    } 
} 
System.out.println(string) 
3
//This is The easiest I can Imagine . 
// You need to just change the order of Columns and rows , Yours is printing columns X rows and the solution is printing them rows X columns 
for(int rows=0;rows<array.length;rows++){ 
    for(int columns=0;columns <array[rows].length;columns++){ 
     System.out.print(array[rows][columns] + "\t");} 
    System.out.println();} 
Смежные вопросы