2017-02-07 1 views
-1

주어진 ArrayList을 내림차순으로 정렬하는 간단한 삽입 정렬 알고리즘을 구현하려고합니다.Java가 main 메소드의 모든 코드를 실행하지 않습니다

import java.util.ArrayList; 
import java.util.Scanner; 

public class InsertionSort { 
    public static void main(String[] args) { 
     Scanner reader = new Scanner(System.in); 

     ArrayList<Integer> list = new ArrayList<Integer>(); 
     while (reader.hasNextInt()) { 
      list.add(reader.nextInt()); 
     } 

     sort(list); 
     for (int i = 0; i < list.size(); i++) { 
      System.out.print(Integer.toString(list.get(i)) + " "); 
     } 
    } 

    private static void sort(ArrayList<Integer> list) { 
     for (int i = 1; i < list.size(); i++) { 
      int key = list.get(i); 

      int j = i - 1; 
      while (j >= 0 && list.get(j) < key) { 
       list.set(j + 1, list.get(j)); 
       j--; 
      } 

      list.set(j + 1, key); 
     } 
    } 
} 

그러나, 때로는 for 루프에서 System.out.print 방법이 항상 목록의 모든 요소에 대해 실행되지 않습니다 여기

모든 코드입니다. 다음은 입력 및 출력 샘플입니다.

// Input: 
31 
41 
59 
26 
41 
58 
^C 
// Output: 
59 58 41 

// Input: 
5 
2 
4 
6 
1 
3 
^C 
// Output: 
6 5 

왜 이런 일이 발생하는지 이해할 수 없습니다. 미리 감사드립니다.

+0

변경없이 코드를 사용하여 내 컴퓨터에서 예상대로 작동합니다 ... 주 방법 끝에 'System.out.println();'을 추가하십시오. –

+0

명령 줄이나 IDE 콘솔에 있습니까? – oopexpert

+0

64 비트 Windows 10 머신에서 Java 8 명령 행을 사용하고 있습니다. –

답변

0

"자원으로 시도"언어 구조를 사용하는 것이 좋습니다.

public static void main(String[] args) { 

    try (Scanner reader = new Scanner(System.in)) { 

     ArrayList<Integer> list = new ArrayList<Integer>(); 
     while (reader.hasNextInt()) { 
      list.add(reader.nextInt()); 
     } 

     sort(list); 
     for (int i = 0; i < list.size(); i++) { 
      System.out.print(Integer.toString(list.get(i)) + " "); 
     } 

    } /* catch (Exception e) { 
    } finally { 
    } */ 
} 

또 다른 요점은 : "STRG + c"(끝 부분에 "^ C"가 표시됨)로 프로그램을 종료 한 것입니다. 어쩌면 입력 스트림을 제대로 플러시 할 수 없습니다. OS 의존 단축키를 사용하는 대신 종료 조건을 도입해야합니다.

관련 문제