2017-02-21 5 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) 
     } 
    } 
} 
  • Meine Frage ist, ob ich für das Element suchen 64 es mich dann sollte als 1 statt [1][1]

Gibt es eine Möglichkeit, den Index eines Arrays erhalten können wie 1 geben Index statt von [1][1].Wie erhält man den Index eines Elements in einem 2D-Array?

Jede Hilfe wird geschätzt.

+2

Warum verwenden Sie eine Flickschusterei, eine asymmetrische Anordnung, wenn eine viel bessere Lösung existiert - um eine 3 int Triangle-Klasse zu erstellen und zu verwenden? –

+0

In diesem Fall, wenn 'someCondition' erfüllt ist, verwenden Sie einfach die Variable j. Hinzufügen eines "Return j" (wenn dies in einer eigenen Methode ist) sollte den Trick tun. – ahjohnston25

+0

@ ahjohnston25 Ich überprüfe das Maximum von zwei Werten im Array, also kann ich das nicht tun, weil ich den Maximalwert vergleiche und dann den Index bekommen möchte, und es ist bereits auf der Suche nach (j + 1), also das ist nicht möglich. –

Antwort

2

Durch Ihre Array 2D Umwandlung int[][]-List<List<Integer>>, können Sie die Vorteile von indexOf nehmen Sie den Index Ihrer max zu finden:

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

Wie kann ich es durchlaufen? –

+0

Ich bin mir nicht sicher, ob ich deine Frage verstehe, meinst du für die "row" Liste? Wenn ja, können Sie natürlich: 'für (Liste Zeile: Dreieck) { für (Integer nr: Zeile) { // einige Code } }' – alexandrum

1

Ich könnte mich irren, aber wäre der Index nicht die j Variable?

Da Sie das Array mit der ersten Schleife durchlaufen, enthält i den Index des aktuellen Arrays (relativ zum übergeordneten Array).

Aber die zweite Schleife iteriert über die untergeordneten Arrays, so dass der Index Ihres Elements der j ist.

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:

auf dem Update Basierend, ich würde empfehlen, die Math.max Funktion wegzuwerfen, denn das macht den Titel des Index verlieren. Da Sie nur zwei Elemente vergleichen müssen, würde eine einfache if-Anweisung ausreichen.

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

Ich habe meinen Code bearbeitet. Kannst du es bitte nochmal anschauen? –

+0

@Hemlata schauen Sie sich meine aktualisierte Antwort an. –

+0

Nein in meinem Array gibt es mehr als 2 Elemente. –

Verwandte Themen