2017-02-07 8 views
-1

私は単純な挿入ソートアルゴリズムを実装しようとしています。その目的は与えられたArrayListを降順にソートすることです。Javaがメインメソッド内のすべてのコードを実行しない

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

私はコマンドラインを使用しています - Java 8は、64ビットWindows 10マシンで使用しています。 –

答えて

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 { 
    } */ 
} 

もう一つのポイントは次のとおりです。あなたは(最後の "C ^" I参照)、 "STRG + C" を使用してプログラムを終了します。入力ストリームが適切にフラッシュされない可能性があります。 OSに依存するショートカットを使用するのではなく、終了条件を導入する必要があります。

関連する問題