如何调试运行但不停止的程序?

时间:2016-03-05 09:35:25

标签: java

我编写了一个程序来按升序和降序对数字进行排序。这是输出:

  

"输入数字进行排序"输入数字{4 3 2 6}

     

"输入' A'对于升序订单' B'按降序排列"输入A.   输出:2 3 4 6

该程序运行时输出正确,但它不会在命令提示符下自动退出。当我按下ctrl-c时,我在线程" main""中得到一条消息"异常。

我试图找到我错误的地方,但现在却没有成功。

代码:

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        System.out.println("Enter numbers to sort");
        String str = in.nextLine();
        String[] splitted = str.trim().split("\\s+");
        int len = splitted.length;
        int a[] = new int[len];
        for (int i = 0; i < len; i++) {
            a[i] = Integer.parseInt(splitted[i]);
        }
        boolean TryAgain = true;
        System.out.println("How to sort: Type 'A' for Ascending and 'B' for Descending order");

        while (TryAgain=true) {

            char SortType = in.next().charAt(0);

            if (SortType == 'A' || SortType == 'a' || SortType == 'B' || SortType == 'b') {// first if

                if (SortType == 'A' || SortType == 'a') {// second if loop
                    // code for sorting in Ascending order
                    for (int j = 0; j < len - 1; j++) {
                        for (int k = 0; k < len - j - 1; k++) {
                            if (a[k] > a[k + 1]) {
                                int n = a[k];
                                a[k] = a[k + 1];
                                a[k + 1] = n;
                            } // for
                        } // for
                    } // if
                    System.out.println("Numbers sorted in Ascending order:");
                    for (int m = 0; m < len; m++) {
                        System.out.print(a[m] + " ");
                    } // for
                    TryAgain = false;
                } // second if loop


                else {// second else
                        // code for sorting in Dscending order
                    for (int j = 0; j < len - 1; j++) {
                        for (int k = 0; k < len - j - 1; k++) {
                            if (a[k] < a[k + 1]) {
                                int n = a[k];
                                a[k] = a[k + 1];
                                a[k + 1] = n;
                            } // for
                        } // for
                    } // if
                    System.out.println("Numbers sorted in Dscending order:");
                    for (int m = 0; m < len; m++) {
                        System.out.print(a[m] + " ");
                    } // for
                    TryAgain = false;
                } // second else loop
            } // first if loop

            else {// first else
                TryAgain = true;
                System.out.println("Invalid input");
                System.out.println("Type 'A' for Ascending and 'B' for Descending order:");
            } // first else loop

        } // while loop


    }// main
}// class

4 个答案:

答案 0 :(得分:3)

while(TryAgain=true)更改为while(TryAgain),以便true不会被TryAgain分配给while并让TryAgain语句看到{{1}的值}}

答案 1 :(得分:1)

键入

   while(tryAgain=true)

无论之前分配的是什么,它都会为tryAgain指定true。这意味着无论如何,循环都将保持为真。在您的代码中,我们看到您已经将布尔变量tryAgain初始化为true。所以,没有必要再这样做了。这是你在while循环中犯的错误,从而保持我持续活跃。进一步在代码中,当你使tryAgain的值为false时,它会在while循环中重新初始化并保持循环继续。相反,当你写

    while(tryAgain)

它使您可以灵活地更改tryAgain的值。因此,当您将其值更改为false时,它仍然为false。如果您愿意,也可以将代码更改为

    while(tryAgain==true)

只是为了省去删除的麻烦;)。上面的代码片段将以相同的方式工作。它将比较tryAgain的值是真还是假,如果它是真的,它将执行while循环其他来自它

答案 2 :(得分:0)

如果你这样做。

while(TryAgain=true){

然后你的while循环一直在运行......

修改

答案 3 :(得分:0)

大多数IF语句都缺少结束括号。正确缩进代码以查找缺少的括号。