Java没有执行main方法

时间:2017-02-07 09:48:41

标签: java methods

我试图实现一个简单的插入排序算法,其工作是将给定的ArrayList按降序排序。

以下是所有代码:

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);
        }
    }
}

但是,有时System.out.print循环中的for方法并不总是对列表中的所有元素执行。以下是输入和输出的一些示例:

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

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

我无法理解为什么会这样。提前谢谢!

1 个答案:

答案 0 :(得分:0)

我建议使用“try with resources”语言构造。

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依赖的快捷方式。