2016-04-22 34 views
-1
having a issue with try and catch, can some one help? 

嘗試{我仍然收到一個MisMatchException與嘗試和趕上,任何想法?

}

+2

你在你的'try'塊之前調用'nextInt()'* ... –

+0

*小技巧:嘗試使用適當的縮進來編寫漂亮的代碼* – Spidey

+0

順便說一句,'finally'塊通常只用於用於關閉流或連接或類似的東西,而不是代碼的主要部分。另外,請注意,finally代碼塊中的代碼仍然會在catch中繼續運行。它將始終轉到最後在嘗試成功或失敗後,除非在極少數情況下(如System.exit等)。 –

回答

1

你問在finally塊,其中沒有一個try-catch塊模塊的輸入(array[i] = input.nextInt();)。

它在try-catch完成後執行。

因此,它不會捕獲finally塊中發生的任何異常。

另外,在這裏:您要求在try-catch塊之外進行輸入,因此它沒有發現異常。

一個解決方案是將try-catch塊放在完整的代碼上,即在while循環之外。

+0

好的感謝您的幫助,即時通訊新的Java非常不確定該怎麼做。我需要改變什麼? – PeteD

+0

@PeteD不應該調用nextInt()和nextLine(),你應該只調用nextLine()。然後你必須檢查它是否是一個單詞,或者試圖將它解析爲數字('Integer.parseInt(...)')。 –

0
while(true) { 

     boolean status = true; //represents the status of the process 

     System.out.print("Enter the number of students that you wish to be part of the module register: "); 

     int numofstudents = input.nextInt(); 

     try{ 

     if (input.nextLine().equals("exit")) 
     {System.exit(0);}   

     status = true; 

     }catch (InputMismatchException IME){ 
      /*3*/  System.out.println("\nNot a number or an integer!\n"); 
      status = false; 
          continue; 
     } 

     finally{ 

      if (status==false) { 
    String[] names = new String[numofstudents]; 
    int[] array = new int[numofstudents]; 
    for(int i = 0; i < numofstudents; i++) { 
     System.out.print("Enter the student's name: "); 
     names[i] = input.next(); 
     System.out.print("Enter the student's module: "); 
     array[i] = input.nextInt(); 
    } 
    selectionSort(names, array); 
    System.out.println(Arrays.toString(names)); 
System.out.println(Arrays.toString(array)); 
Scanner scan = new Scanner(System.in); 
      } 
    }} 

事情終於被封鎖了會被稱爲即使沒有例外。 你還需要處理finally塊內的異常.bt我已經限制了每次在一個布爾值的幫助下調用finally塊。這是非常糟糕的編碼實踐,您可能需要用不同的方法替換整個代碼。