2016-10-04 1 views
4

Ich weiß nicht, ob ich damit klar bin, aber ich habe bereits das Minimum und die maximale Ausdrucke richtig, aber ich kann nicht scheinen zu scheinen heraus, wie man die genaue Reihe und Spalte sagt, in der sie sich befinden. das ist, was ich bis jetzt habe;Wie finde ich den Ort der maximalen und minimalen Wert eines 2d-Array

double max = m[0][0]; 
     double min = m[0][0]; 
    System.out.println("The matrix is : "); 

     for(int i = 0; i < m.length; i++) 
     { 
      for (int j = 0; j < m[i].length; j++) 
      { 
       System.out.printf(" " + "%6.1f " , m[i][j]); 
       if (m[i][j] > max) 
        max = m [i][j];  

       else if 
       (m[i][j] < min) 
        min = m [i][j]; 

Wie kann ich eine Aussage über ihre Standorte machen? zum Beispiel: ("Maximun Nummer ist in Zeile 1, Spalte 2") so etwas ... Ich würde wirklich jede Hilfe zu schätzen

+3

Wenn Sie 'max = m [i] [j]' verwenden, speichern Sie auch den Speicherort. Also, an der Spitze, haben Sie doppelte Max = m [0] [0]; int x = 0; int y = 0; 'wo' x' und 'y' Koordinaten sind. Also schreiben Sie unter 'max = m [i] [j]' 'x = i; y = j; '. – Gendarme

+0

Im Allgemeinen ist der beste Weg, um Max und Min zu speichern, der "laufende" Max und Min, während Sie Werte in die Arrays eingeben, wenn Sie die Option haben. Du hast nicht gezeigt, wie du Werte in das Array eingibst, also weiß ich nicht, ob du das kontrollierst oder ob es eine externe Kraft ist. Wenn Sie die Werte in die Arrays eingeben, dann ist es unnötig und verschwenderisch, danach zu suchen, nachdem Sie diese Information bereits im Vorfeld gefunden haben. – searchengine27

Antwort

3

Siehe die untenstehende Änderung. Ich habe Variablen hinzugefügt, um die Indizes von min und max zu verfolgen. Am Ende Ihrer Schleife können Sie einfach maxIndex1, maxIndex2, minIndex1 und minIndex2 ausdrucken.

double max = m[0][0]; 
double min = m[0][0]; 

//declare variables to track the indices of the min and max 
int maxIndex1 = -1; 
int maxIndex2 = -1; 
int minIndex1 = -1; 
int minIndex2 = -1; 

System.out.println("The matrix is : "); 
for(int i = 0; i < m.length; i++) 
{ 
    for (int j = 0; j < m[i].length; j++) 
    { 
     System.out.printf(" " + "%6.1f " , m[i][j]); 
     if (m[i][j] > max) 
     { 
      max = m [i][j]; 
      //record the indices of the new max 
      maxIndex1 = i; 
      maxIndex2 = j; 
     } 
     else if (m[i][j] < min) 
     { 
      min = m [i][j]; 
      //record the indices of the new min 
      minIndex1 = i; 
      minIndex2 = j; 
     } 

Beachten Sie, dass, wenn Sie zwei Werte haben, die gleich sind und für den Maximalwert in der Matrix gebunden, dies nur eine der beiden aufnehmen wird. Wenn Sie die Positionen aller Bindungen für min/max aufzeichnen möchten, können Sie dies ändern, um eine Koordinatenliste anstelle einer einzelnen Koordinate zu speichern.

+0

Beachten Sie, dass dies nur funktioniert, wenn die Max- und Min-Werte in der Matrix eindeutig sind, da Sie nur einen Speicherort speichern. – Gendarme

+0

Sie könnten das 'else' von 'else if' löschen, falls Sie ein sortiertes Array haben. – Robert

+0

@Gandarme Ich denke, dieses Beispiel wird für das funktionieren, was OP will, aber es ist definitiv erwähnenswert. Ich habe meinen Beitrag bearbeitet, um das zu berücksichtigen. – nhouser9

1

Das ist einfach! Erklären Sie einfach zwei weitere Variablen, um Ihre x- und y-Koordinaten zu speichern. Und update sie sowohl in if als auch in anderen (vergiss nicht, geschweifte Klammern zu deiner if und else-Klausel hinzuzufügen!) Und du hast sie!

+2

Curly Hosenträger sind in diesem Fall nicht notwendig. – Gendarme

+0

Die literale Grammatik nach der Java-Spezifikation für eine if-Anweisung ist 'if ParExpression Statement [else Anweisung]', wobei 'Anweisung' ein Block oder eine einzelne Zeilenanweisung ist. Ich stimme zu, geschweifte Klammern sind unnötig und rein optional und persönliche Vorlieben. – searchengine27

+1

Also sagst du, das ist in Ordnung ?! wenn (m [i] [j]> max) max = m [i] [j]; maxIndex1 = i; maxIndex2 = j; –

Verwandte Themen