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

上述代码正在工作。您可以根据需要进行修改。