2017-02-21 25 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]です。2D配列の要素のインデックスを取得する方法は?

何か助けていただければ幸いです。

+2

なぜその場しのぎの、非対称配列、はるかに優れたソリューションを使用exists - 3 int triangleクラスを作成して使用しますか? –

+0

その場合、 'someCondition'が満たされているときは、j変数だけを使用します。 "return j"を追加する(これが独自の方法であれば)、そのトリックを行うべきです。 – ahjohnston25

+0

@ ahjohnston25配列の2つの値の最大値をチェックしていますので、最大値を比較してインデックスを取得したいのですが、それはすでに(j + 1)のようにチェックしています。ありえない。 –

答えて

2

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'リストを通してループを意味しますか?もしそうであれば、もちろん次のことができます。 'のための(一覧行:三角形){ (整数NR:行)のための{ //何らかのコード }}' – alexandrum

1

私は間違いかもしれませんが、インデックスはjですか?

最初のループで配列をループしているため、iには現在の配列のインデックス(親配列を基準にしたもの)が含まれます。

しかし、2番目のループは子配列を反復処理するため、要素のインデックスは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機能を捨てるためにお勧めしたいです。比較する要素が2つしかないので、単純なif文で行うことになります。 、あなたがmaxのインデックスを見つけるためにindexOfを利用することができList<List<Integer>>にあなたの2Dアレイint[][]を変換することにより

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

@Hemlataは私の更新された答えを見ています。 –

+0

配列に2つ以上の要素がありません。 –

関連する問題