2017-01-09 2 views
0

У меня есть String[][] field. Например, это может выглядеть так:Сравнение элементов строк или столбцов в 2D массиве (Java)

[xy] [xy] [xy] [xy] [xy] 
[xy] [xy] [xy] [xy] [xy] 
[xy] [xy] [xy] [xy] [xy] 
[xy] [xy] [xy] [xy] [xy] 
[xy] [xy] [xy] [xy] [xy] 

Количество строк и столбцов равно, но число может быть различным каждый раз. Мне нужно проверить, равны ли значения элементов целой строки или целого столбца. я написал некоторый плохой код для 3x3 field проверить линию, здесь:

public boolean checkHorizontal(String[][] field) { 
     boolean value = false; 
     int x = 0; 
     for (int i = 0; i < field.length; i++) { 
      if (field[i][x].equals(field[i][x + 1]) && 
        field[i][x + 1].equals(field[i][x + 2]) && 
        !field[i][x].equals("[something]")) { 
       value = true; 
      } 
     } 
     return value; 
    } 

Но это не универсальный способ проверить линию, потому что мы можем иметь матрицу различных размеров (и нужно добавить x + 3, x + 4, x + 5 и т. Д.) Есть ли какой-либо эффект способ сравнения всей строки/столбца 2D-массива?

+1

вам нужно использовать два для циклов при перемещении 2D-массива и его содержимого –

ответ

3

Для проверки всех строк:

for(int i = 0; i < field.length; i++){ 
    for(int j = 1; j < field[i].length; j++){ 
     if(!field[i][0].equals(field[i][j])){ 
      return false; 
     } 
    } 
} 

return true; 
+0

Excelente ответ! Я только позабочусь, если объекты, которые нужно сравнить, это String, потому что a == b woudl будет ложным, несмотря на a = "a" и b = "a". –

0

Ответ @quidproquo фактически проверяет, если все поля равны, но это довольно легко адаптировать решение к одной строке или столбце:

public boolean isEqual(String[][] data, int rowColumn, boolean row){ 
    int i = 1; 
    int limit = (row) ? data[0].length : data.length; 
    while(i<limit){ 
     if ((row) ? !data[rowColumn][i].equals(data[rowColumn][0]) 
      : !data[i][rowColumn].equals(data[0][rowColumn])) 
      return false; 
    } 
    return true; 
} 
Смежные вопросы