2016-05-09 7 views
0

Ich versuche, eine Liste von 5 Namen aus einer Datei zu lesen, die Länge jedes Namens zu bestimmen und die Längen mit einem Array zu sortieren. Allerdings kann ich nicht herausfinden, wie man die Länge des Namens an das Array weitergibt ... Hilfe wird sehr geschätzt!Versucht, Namen nach Länge zu sortieren

import java.io.*; 
import java.util.Arrays; 
public class NewClass { 

public static void main(String[] args) throws IOException, 
    FileNotFoundException { 

String file = "names.txt"; 
processFile("names.txt"); 

} 


public static void processFile (String file) throws IOException, FileNotFoundException{ 
BufferedReader inputReader = 
     new BufferedReader (new InputStreamReader 
(new FileInputStream("names.txt"))); 
String line; 
while ((line = inputReader.readLine()) != null){ 

    int nameL =line.length(); 

} 
/*public static void main (String [] args) { 
*/ 
    int [] aryNum; 
    aryNum= new int [5]; 

    aryNum[0] = int nameL; 
    aryNum[1]=int nameL; 
    aryNum[2]=int nameL; 
    aryNum[3]=int nameL; 
    aryNum[4]=nameL; 

    Arrays.sort(aryNum); 

    int i; 

    for (i=0; i<aryNum.length; i++) { 
     System.out.println("" + aryNum[i]); 

    } 

} 


} 
+0

Möchten Sie nur die Länge von Namen sortieren oder möchten Sie die Namen (Strings) basierend auf ihren Längen sortieren? –

+0

Ich würde gerne die Längen der Namen sortieren, aber auch zu lernen, wie man die Namen anhand ihrer Längen sortiert, wäre auch großartig! –

Antwort

0

Wenn Sie die Längen der Zeichenfolgen in einem Array sortieren möchten, dann suchen Sie wirklich die Zahlen sortieren:

static int[] getSortedLengths(String[] names) { 
    int len = names.length; 
    int [] lengths = new int[len]; 
    for (int i = 0; i < len; i++) { 
     // watch for nulls 
     lengths[i] = names[i].length(); 
    } 
    Arrays.sort(lengths); 
    return lengths; 
} 

Wenn Sie die Namen sortieren möchten (die Saiten) verwenden Sie das generische Sortierkonzept, das auf einem Komparator basiert. Ein Komparator implementiert ein Verhalten, das Elemente einer Auflistung (oder eines Arrays) nach bestimmten Kriterien anordnet. Der interessante Teil besteht darin, dass Sie nur den Vergleich zweier Elemente des Typs, aus dem Ihre Sammlung (oder Array) besteht, abstrahieren müssen. Dann übergibt man den Komparator an die Sortiermethode und voila! Sie erhalten eine sortierte Sammlung (oder ein Array). Für den Anfang, lassen Sie sich die folgende Version verwenden:

static void sortStringsByLength(String[] names) { 
    Comparator<String> stringLengthComparator = new Comparator<String>() { 
     @Override 
     public int compare(String o1, String o2) { 
      return Integer.compare(o1.length(), o2.length()); 
     } 
    }; 
    Arrays.sort(names, stringLengthComparator); 
} 

Gerade durch mit der compare Methode spielen, können Sie viele Dinge tun, wie umgekehrt alle Fäden durch Länge (längste Zeichenfolge zuerst) bestellen, oder sich durch eine Art Sortier Punktzahl für jede Saite und so weiter. Dies nennt man Abstraktion, eine Fähigkeit von größter Bedeutung in der Computerprogrammierung.

+0

Vielen Dank! Wie integriere ich das in meinen Code? Wenn ich versuche, bekomme ich Fehler wie "Illegaler Beginn des Ausdrucks" und "kann Klasse nicht finden" ... –

+0

Ich denke, Sie haben einige grundlegende Probleme bei der Code-Organisation. Beginnen Sie mit dem Herunterladen einer IDE wie [Intellij] (https://www.jetbrains.com/idea/download/) und kodieren Sie dann die Methoden nacheinander: Lesen Sie eine Datei Zeile für Zeile und fügen Sie diese Zeilen (angeblich Namen) zu a hinzu vordefiniertes Array. Der Code, den Sie oben gepostet haben, sieht nicht wie etwas aus, das kompiliert wird. Post separate Fragen mit klaren Fehlermeldungen erhalten Sie. Das sollte dich jedoch nicht davon abhalten, meine Antwort oben zu akzeptieren :-). –