2016-11-28 78 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,則可能會出現問題,因爲它默認使用\ r作爲默認行而不是\ n(linux,現代Mac OS)或\ r \ n(Windows)。你的代碼似乎只讀了一行中的所有名字,所以它沒有任何東西可以排序。 –

+2

看起來你在數組中只有一個項目:一個帶有新行的單個字符串。當您使用單個項目對數組進行排序時,您會得到與結果相同的數組。 –

回答

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,而不是字符串,使您不必指定大小來初始化。

上述代碼正在工作。您可以根據需要進行修改。