2016-03-31 7 views
0

私は、ユーザーに名前を入力させて、タイトルケースとアルファベット順に入れなければならない学校の割り当てを持っています。私の問題は、ユーザーが11以上の名前を入力すると、もはやアルファベット順になっていないということです。誰かがなぜこれが起こっているのかを説明して、これを修正するためのヒントを私にくれたら、本当に感謝します。ありがとう!Javaの11番目のユーザー入力の後に、文字列のArrayListをアルファベット順にソート

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); 
    } 

このメソッドは、文字列を大文字に変換します。

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; 
    } 

名前をアルファベット順に並べる方法です。

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; 
     } 
    } 
    } 

割り当ても、この1つは問題があなたのabcSort方法である

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

サイドバーのコメント:最初に質問した後に名前を保存していません。 'while'ループの中に' names.add(g); 'が必要です。 – robotlos

+0

問題は 'abcSort(...)'メソッドにあります。このメソッドは実際には2つのうちのどれかを実行できます:a)新しい文字列をリストの先頭に追加するか、またはb)新しい文字列をリストの末尾に追加する。なぜこのようなことが起こるか分かるならば、それを修正する方法を考えることができます。 – msandiford

答えて

1

を何であるのArrayListを印刷する方法を持っている私を必要とします。 ifelse部分の両方にreturnがあるので、forループが最初の文字列を超えることは不可能です。文字列がより前にない場合は、このリストの末尾に文字列を追加したい場合は、他の文字列のを追加します。現時点では、最初の文字列の前に行くことができない場合は、最後に移動します。 elseを取り除き、ループの後になるようにsorted.add(inputName);行を移動する必要があります。 Aバージョン修正

は次のとおりです。

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); 
} 

良いIDEは、このような問題を見つけることができます。あなたのバージョンをIntelliJ IDEAに貼り付けると、forループは茶色の恐ろしい影になり、それは問題を教えてくれる:'for' statement does not loop

どこから番号11を取得するのかわかりません。 Anne, Chris, Bob, Stopと入力すると元のバージョンには失敗します。

+0

私はチェックするために宿題を入力するコードランナーから11を得ました。助けてくれてありがとう!あなたはIDEが何であるかを説明できますか? – nina0402

+0

IDEは、プログラムの作成および実行に使用するプログラムです。私はIntelliJ IDEAをお勧めします。 IDEをまったく使用する必要はありませんが、バグを見つけるのに便利です。 –

関連する問題