2015-04-04 100 views
0

在java中使用Scanner類時,是否需要處理異常?你怎麼能解釋這個?Scanner中的異常處理

我對此沒有正確的想法。任何人都可以幫助我?

+0

你到目前爲止嘗試過什麼?請張貼您遇到問題的代碼片段。 – 2015-04-04 08:39:25

+0

@Sameera,你想做什麼?請分享一些例子 – Neo 2015-04-04 08:47:24

回答

1

任何使用拋出異常的方法都應該處理,重新拋出或重新聲明(如果它是檢查了異常),它們可以爲下一級選擇如何處理它。

Scanner中,如果採取nextDouble()方法,則會根據掃描儀的狀態引發各種異常。你必須關心它。
但護理的方式取決於您的程序邏輯。

這就是說,在Scanner大多數的例外是RuntimeException,這意味着你不需要明確捕捉它們在你的代碼。假設你在main中,如果發生異常,它將由JVM在頂層處理。我這種情況下,你的程序將退出一個錯誤代碼和一個堆棧跟蹤。

Scanner這是檢查而且你必須以某種方式處理唯一的例外,就是當你構建從文件ScannerIOExceptionFileNotFoundException不能被忽略。


例外情況(濫用)使用的例子,當你閱讀double,你可能會做的事:

public static void testScanDoubleWithException() { 
    Scanner sin = new Scanner(System.in); 
    System.out.println("Enter a double: "); 
    while (true) { 
     try { 
      double d = sin.nextDouble(); // Throw if not a double 
      System.out.println("Read double value: "+d); 
      break; 
     } 
     catch (InputMismatchException e) { 
      System.out.println("Invalid double, shoot again:"); 
      sin.nextLine(); // consume bad input 
     } 
    } 
    sin.close(); 
} 

Scanner類提供了更簡單/明確的方式:

public static void testScanDouble() { 
    Scanner sin = new Scanner(System.in); 
    System.out.println("Enter a double: "); 
    while (!sin.hasNextDouble()) { 
     System.out.println("Invalid double, shoot again:"); 
     sin.nextLine(); 
    } 
    double d = sin.nextDouble(); 
    System.out.println("Read double value: "+d); 
    sin.close(); 
} 
0

Java支持異常處理,因此我們可以避免在應用程序中出現不需要的行爲。在任何交易中,如果我們預見到任何不需要的行爲,我們都應該處理異常。掃描器類可以基於所使用的操作類型拋出任何異常,例如Runtime,illegalArgument,numberformat等。因此,作爲一種良好的習慣,我們應該總是單獨捕獲所有特定的異常,並且執行得更好。

0

是的。例如,如果您使用Scanner對象來讀取文件,則應該處理FileNotFoundException,否則會出現錯誤。但是,如果您只是使用System.in作爲輸入,則不會顯示錯誤。但是,與此同時,您應該檢查輸入是否符合用戶的要求,因此總是建議使用異常處理。