2016-03-31 12 views
0

Ich habe eine Aufgabe für die Schule, in der ich einen Benutzer Namen eingeben müssen, die dann in Titel und dann in alphabetischer Reihenfolge eingegeben werden. Mein Problem ist, dass wenn ein Benutzer 11 Namen oder mehr eingibt, sie nicht mehr alphabetisch werden. Wenn jemand erklären könnte, warum das passiert und vielleicht geben Sie mir ein paar Tipps, um das zu beheben, würde ich es wirklich zu schätzen wissen. Vielen Dank!Sortieren einer ArrayList von Strings in alphabetischer Reihenfolge nach der 11. Benutzereingabe in Java

import java.util.Scanner; 
import java.util.ArrayList; 

public class Main 
{ 
    public static void main (String [] args) 
    { 
    ArrayList <String> names = new ArrayList <String>(); 

    Scanner scan = new Scanner(System.in); 

    System.out.println ("Please Enter a Name. (Enter 'stop' to end)"); 
    String g = scan.nextLine(); 
    g = titleCase(g); 
    names.add(g); 

    while (!g.equals("Stop")) 
    { 
     System.out.println ("Please Enter a Name. (Enter 'stop' to end)"); 
     g = scan.nextLine(); 
     g = titleCase(g); 
     if (!g.equals("Stop")) 
      abcSort(g, names); 
    } 

    toString(names); 
    } 

Diese Methode gibt die Zeichenfolge in den Titel zurück.

public static String titleCase(String s) 
    { 
    String firstLetter; 
    s = s.toLowerCase(); 
    firstLetter = s.substring(0, 1); 
    s = firstLetter.toUpperCase() + s.substring(1, s.length()); 

    return s; 
    } 

Dies ist meine Methode, um die Namen in alphabetischer Reihenfolge zu setzen.

public static void abcSort(String inputName, ArrayList <String> sorted) 
    { 
    String g; 
    for (int i = 0; i < sorted.size(); i++) 
    { 
     g = sorted.get(i); 

     if (inputName.compareTo(g) < 0) 
     { 
      sorted.add (i, inputName); 
      return; 
     } 
     else { 
      sorted.add(inputName); 
      return; 
     } 
    } 
    } 

Die Zuordnung erfordert mich auch ein Verfahren zu haben, das Arraylist zu drucken, das ist es, was diesen tut

public static void toString(ArrayList s) 
    { 
    System.out.println(s); 
    } 
} 
+1

Sidebar-Kommentar: Sie speichern die Namen nicht nach dem ersten Mal, wenn Sie fragen. Sie benötigen einen 'names.add (g);' innerhalb Ihrer 'while' Schleife. – robotlos

+0

Das Problem liegt in der 'abcSort (...)' Methode. Diese Methode kann wirklich nur eines von zwei Dingen tun: a) entweder füge die neue Zeichenkette am Anfang der Liste hinzu oder b) füge die neue Zeichenkette am Ende der Liste hinzu. Wenn Sie herausfinden können, warum dies passiert, sollten Sie in der Lage sein, herauszufinden, wie Sie das Problem beheben können. – msandiford

Antwort

1

Das Problem mit Ihrer abcSort Methode. Da Sie return sowohl im if als auch im else Teil sind, ist es für die for Schleife unmöglich, über die erste Zeichenfolge hinaus zu kommen. Sie möchten die Zeichenfolge am Ende dieser Liste hinzufügen, wenn sie nicht vor einer der anderen Zeichenfolgen gehen kann. Im Moment geht es bis zum Ende, wenn es nicht vor der ersten Saite gehen kann. Sie müssen die else loswerden und die Zeile sorted.add(inputName); nach der for Schleife verschieben.

Eine korrigierte Version ist:

public static void abcSort(String inputName, ArrayList <String> sorted) 
{ 
    String g; 
    for (int i = 0; i < sorted.size(); i++) 
    { 
     g = sorted.get(i); 

     if (inputName.compareTo(g) < 0) 
     { 
      sorted.add (i, inputName); 
      return; 
     } 
    } 
    sorted.add(inputName); 
} 

Eine gute IDE können Probleme wie diese finden. Wenn ich Ihre Version in IntelliJ IDEA einfügen, geht die for Schleife einen schrecklichen Braunton und es sagt mir das Problem: 'for' statement does not loop.

Ich weiß nicht, woher Sie die Nummer 11 bekommen. Die ursprüngliche Version schlägt fehl, wenn Sie Anne, Chris, Bob, Stop eingeben.

+0

Ich habe 11 aus dem Code-Runner bekommen wir geben die Hausaufgaben ein, um zu überprüfen. Vielen Dank für die Hilfe! Können Sie erklären, was eine IDE ist? – nina0402

+0

Eine IDE ist ein Programm, mit dem Sie Programme schreiben und ausführen können. Ich empfehle IntelliJ IDEA. Sie müssen nicht unbedingt eine IDE verwenden, aber sie sind nützlich, um Fehler zu finden. –

Verwandte Themen