2016-03-05 37 views
0

我已经编写了一个程序,以升序和降序对数字进行排序。下面是输出:如何调试运行但不停止的程序?

“输入数字进行排序” 输入数字{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 
+1

尝试将'while(TryAgain = true)'改为'while(TryAgain)'和停止有害的任务。 – MikeCAT

+2

什么格式.... – Ian

+2

请格式化您的代码。难怪你找不到你的错误;) – Mark

回答

0

,如果你做到这一点。

while(TryAgain=true){ 

那么你while循环运行,直到永远......

修改

3

变化while(TryAgain=true)while(TryAgain)使true不会被分配给TryAgain那里有while声明见值为TryAgain

+0

谢谢,我修好了,现在工作正常。 – Tom

0

对于大多数IF语句,缺少闭括号的括号。正确缩进代码以找到缺少的括号。

1

当你键入

while(tryAgain=true) 

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

while(tryAgain) 

它给你灵活地改变tryAgain的价值。所以当你把它的值改为false时,它仍然是错误的。此外,如果你是如果你想,你可以改变你的代码

while(tryAgain==true) 

只是为了节省删除的麻烦;)。上面的代码将以相同的方式工作。它会比较tryAgain的值是真还是假,如果它是真的,它将执行while循环,否则会出来它

相关问题