2017-02-21 8 views
-1
int[][] triangle = { 
           {75}, 
          {87,64}, //If index is 0, then start from j = 0 in 3rd row (24, 56, 88) 
           {24, 56, 88}, // if index is 2 then start from j = 2 in 4th row (43, 45, 67, 76), and compare 67 and 76, and find the max 
           {43, 45, 67, 76} 
    }; 

    for (int i = 0; i < array.length - 1; i++) { 
    for (int j = 0; j < array[i].length; j++) { 
     int x = triangle[i][j]; 
     int y = triangle[i][j + 1]; 
      int max = Math.max(x, y); 
     if (someCondition) { 
      //getTheIndexOFMaxVariable (Here If I am looking for 64 then it should give me 1 as an index) 
     } 
    } 
} 
  • Мой вопрос, если я ищу элемент 64, то он должен дать мне индекс как 1 вместо [1][1]

Есть ли способ я могу получить индекс массива, как 1 вместо от [1][1].Как получить индекс элемента в двумерном массиве?

Любая помощь приветствуется.

+2

Зачем использовать кладж, асимметричный массив, когда гораздо лучшее решение существует - создать и использовать класс 3 int Triangle? –

+0

В этом случае, когда выполняется 'someCondition', просто используйте переменную j. Добавление «return j» (если это по-своему) должно сделать трюк. – ahjohnston25

+0

@ ahjohnston25 Я проверяю максимум два значения в массиве, поэтому я не могу этого сделать, потому что я сравниваю максимальное значение, а затем хочу получить индекс, и он уже проверяет как (j + 1), так что это невозможно. –

ответ

2

При преобразовании 2D массива int[][] в List<List<Integer>>, вы можете воспользоваться indexOf найти индекс вашего max:

List<List<Integer>> triangle = new ArrayList<List<Integer>>(); 
    triangle.add(Arrays.asList(75)); 
    triangle.add(Arrays.asList(95, 64)); 

    for (List<Integer> row : triangle) { 
     // you can also ask for row.indexOf(max); 
     System.out.println("At row: " + triangle.indexOf(row) + " is: " + row.indexOf(64));   
    } 
+0

Как я могу пройти через него? –

+0

Я не уверен, понимаю ли я ваш вопрос, вы имели в виду цикл через список 'row'? Если да, конечно, вы можете: 'for (Список строка: треугольник) { для (целое число: строка) { // некоторый код } }' – alexandrum

1

Возможно, я ошибаюсь, но не будет ли индекс j переменной?

Поскольку вы перебираете массив с первым циклом, i будет содержать индекс текущего массива (относительно родительского массива).

Но второй цикл итерации над дочерними массивами, поэтому индекс вашего элемента будет j.

int[][] triangle = { 
      {75}, 
      {95,64} 
    }; 

for (int i = 0; i < array.length - 1; i++) { 
    for (int j = 0; j < array[i].length; j++) { 
     // notice we use j variable to access the item, since it contains the index for current 
     int item = array[i][j]; 

     if (item == 64) { 
      // your code 
     } 
    } 
} 

EDIT:

на основе обновления, я бы рекомендовал выбросить функцию Math.max, потому что заставляет вас терять след индекса. Поскольку у вас есть только два элемента для сравнения, простое утверждение if.

int x = triangle[i][j]; 
int y = triangle[i][j + 1]; 
int max = 0; 
int indexOfMax = 0; 

// using >= just in case if both numbers are equal 
if (x >= y) { 
    max = x; 
    indexOfMax = j; 
} else { 
    max = y; 
    indexOfMax = j + 1; 
} 

if (someCondition) { 
    // your code 
} 
+0

Я редактировал свой код. Не могли бы вы еще раз взглянуть на него? –

+0

@ Хемлата взгляните на мой обновленный ответ. –

+0

В моем массиве нет более двух элементов. –