2016-11-28 1 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 

출력은 다음과 같습니다 : 나는 OS X를 사용하고

John 
Rachel 
Peter 
Illyana 
Erik 
Jimmy 
Dan 
Ken 
Guile 
Barbara 

John 
Rachel 
Peter 
Illyana 
Erik 
Jimmy 
Dan 
Ken 
Guile 
Barbara 

**, 즉 문제의 원인이 될 수 있습니다 다음과 같이 파일의 내용은?

+2

루틴이 이름 배열을 읽을 것으로 예상되지만 실제로는 파일에 줄 바꿈을 넣어야합니다. 구형 Mac OS를 사용했다면 \ n (Linux, 현대 Mac OS) 또는 \ r \ n (Windows) 대신 기본적으로 행 끝으로 \ r을 사용했기 때문에 문제가 될 수있었습니다. 코드가 한 줄로 모든 이름을 읽는 것처럼 보이므로 정렬 할 항목이 없습니다. –

+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를 사용하면 초기화 크기를 지정하지 않아도됩니다.

위의 코드가 작동합니다. 필요한 경우 수정할 수 있습니다.

관련 문제