2016-05-08 27 views
0

Ich mache ein Schulprojekt und ich habe meine Ohren in einem 2D-Array gefangen versucht, es zu sortieren.Java. 2d Array sortieren nach Spalte

Also, was ich bekam, ist dies:

String array[][]={ {"5", "22,2", "car payment", "visa", "21/04/2016}, 
        {"3", "15,4", "shop", "cash", "16/02/2017}, 
        {"1", "11,3", "gym", "visa", "10/01/2016} }; 

Was ich brauche, um die zweite Spalte das Array zu tun Liste ist (absteigend). So soll mein aufgeführt Array so etwas wie diese:

{"1", "11,3", "gym", "visa", "10/01/2016} 
{"3", "15,4", "shop", "cash", "16/02/2017} 
{"5", "22,2", "car payment", "visa", "21/04/2016} 

Ich habe versucht, so etwas wie diese:

for (int i = 0; i < array.length; i++){ 
    for (int j = 0; j < array[i].length; j++) { 
    if (Float.valueOf(array[i][1]) > Float.valueOf(array[i+1][1])) { 
     temp = array[j+1]; 
     array[j+1] = array[j]; 
     array[j] = temp; 
    } 
    } 
} 

aber scheint zum Scheitern verurteilt. Wo mache ich falsch?

Vielen Dank im Voraus!

Antwort

1

Sie haben eine seltsame Mischung zwischen einer Blasensortierung und einer Auswahlsortierung codiert. Der Vergleich sollte zwischen array[i][1] und array[j][1], nicht array[i][1] und array[i+1][1]:

if (Float.valueOf(array[i][1]) > Float.valueOf(array[j][1])) 

Dies sollte mit einem Punkt Dezimaltrennzeichens für float s arbeiten. Verwenden Sie this Q&A, wenn Sie Gleitkommazahlen mit Komma-Dezimaltrennzeichen analysieren müssen.

0

Umgestalten der 2D-Array nur für eine 1D-Array (Sie einen Schmerz im Nacken sparen ...), dann Arrays.sort nutzen und die eigenen Vergleicher passieren, wo Sie die element2 jeder Zeile vergleichen

Beispiel:

public static void main(String[] args) { 
    String[] array = { "\"5\", \"22,2\", \"car payment\", \"visa\", \"21/04/2016\"", 
      "\"3\", \"15,4\", \"shop\", \"cash\", \"16/02/2017\"", "\"1\", \"11,3\", \"gym\", \"visa\", \"10/01/2016\"" }; 
    Arrays.sort(array, new Comparator<String>() { 

     @Override 
     public int compare(String o1, String o2) { 
      return o1.split(",")[1].compareTo(o2.split(",")[1]); 
     } 
    }); 
    System.out.println(Arrays.toString(array)); 
} 

dies die Arrays durch den „Preis“ sortieren wird (ich denke, ist der Name des Feldes ..)

+0

ich würde lieben, das zu tun, aber ich habe den 2D-Array von 5 Misch Arrays in eins. Ich bekomme jedes der Felder mit einem Array (1 für die Eingabe, 1 für den Preis, 1 für die Kategorie, 1 für die Zahlungsart und 1 für das Datum). Und dann lege ich alle in dieses letzte String-Array. –