2016-03-05 60 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循環,否則會出來它

相關問題