2016-11-28 13 views
-1
public static void main(String[] args) 
{ 
    String file = ""; 
    Scanner a = null; 
    try 
    { 
     a = new Scanner(new File("names.txt")); 
    } 
    catch (FileNotFoundException e) 
    { 
     System.out.println("There was an error with your file"); 
     e.printStackTrace(); 
    } 
    while(a.hasNextLine()) 
    { 
     file = file +a.nextLine(); 
     file +="\n"; 
    } 
    System.out.println(file); 
    String name [] = {file}; 
    int i; 
    for(i=0;i<name.length;i++) 
    { 
     for(int j=i+1;j<name.length;j++) 
     { 

      if(name[i].substring(0,1).compareTo(name[j].substring(0,1))<0) 
      { 
       String temp = name[i]; 
       name[i] = name[j]; 
       name[j] = temp; 
      } 
     } 
    } 
    for(i = 0;i < name.length;i++) 
     System.out.println(name[i]); 

注:以下のようにファイルの内容は次のとおりです。配列がアルファベット順でソートされないのはなぜですか?

John 
Rachel 
Peter 
Illyana 
Erik 
Jimmy 
Dan 
Ken 
Guile 
Barbara 

出力は次のとおりです。

John 
Rachel 
Peter 
Illyana 
Erik 
Jimmy 
Dan 
Ken 
Guile 
Barbara 

John 
Rachel 
Peter 
Illyana 
Erik 
Jimmy 
Dan 
Ken 
Guile 
Barbara 

**それが問題の原因になる可能性があり、私は、OS Xを使用していますか?

+2

あなたはルーチンが名前の配列を読み込むことを期待しているようですが、実際にはファイルに改行を入れなければなりません。古いMac OSを使用していた場合は、\ n(Linux、現代Mac OS)または\ r \ n(Windows)ではなく、デフォルトで行末に\ rを使用していたため、問題であった可能性があります。あなたのコードは、単一行ですべての名前を読み取るように見えるので、ソートするものはありません。 –

+2

配列内にアイテムが1つしかないように見えます。新しい文字列が入っています。単一の項目を持つ配列をソートすると、結果と同じ配列が返されます。 –

答えて

1

String name [] = {file};
あなたはそれで一つのアイテムを持つ配列を初期化する、あなただけの\nに名前を接続し、マルチのアイテムを配列のように思えます。あなたが初期化するサイズを指定する必要がないように
String name[] = file.split("\n");

1
public static void main(String[] args) { 
    String file = ""; 
    Scanner a = null; 
    try { 
     a = new Scanner(new File("E:\\names.txt")); 
    } catch (FileNotFoundException e) { 
     System.out.println("There was an error with your file"); 
     e.printStackTrace(); 
    } 
    List<String> name; 
    name = new ArrayList<String>(); 
    while (a.hasNextLine()) { 
     file = a.nextLine(); 
     name.add(file); 
     file += "\n"; 
    } 
    System.out.println(file); 
    int i; 
    for (i = 0; i < name.size(); i++) { 
     for (int j = i + 1; j < name.size(); j++) { 

      if (name.get(i).substring(0, 1) 
        .compareTo(name.get(j).substring(0, 1)) < 0) { 
       String temp = name.get(i); 
       name.set(i, name.get(j)); 
       name.set(j, temp); 
      } 
     } 
    } 
    for (i = 0; i < name.size(); i++) 
     System.out.println(name.get(i)); 
} 

文字列の代わりに使用ArrayListの:あなたはこのようにそれを初期化することができます。

上記のコードは機能しています。必要に応じて変更することができます。

関連する問題