2017-06-21 68 views
1

我有一個問題,我的老師想在代碼期望和嘗試趕上。在錯誤的輸入之前進行保護,我需要把它放到我的代碼中我有一些東西,但是如果我把一些像a,b,c這樣的字母掉下來,就不能正常工作。java中的期望值下降時,我把字母a b c

package projectprucha; 

import java.util.Scanner; 
import java.io.*; 
import java.util.InputMismatchException; 

public class Projectprucha { 

public static Scanner scan = new Scanner(System.in); 

public static void main(String[] args) { 

    int Choose; 

    do { 

     writeMenu(); 
     Choose = scan.nextInt(); 
     scan.nextLine(); 

     try { 
      switch (Choose) { 

       case 1: 

        Joke vtip = new Joke(); 
        vtip.Napis(); 
        JokeII vtipII = new JokeII(); 
        vtipII.NapisII(); 
        break; 

       case 2: 

        Kalkulacka.staticMethod(); 
        break; 

       case 3: 

        Moudro rada = new Moudro(); 
        rada.Rekni(); 

       case 0: 
        System.out.println("You have exited the system"); 
        System.exit(0); 
       default: 
        throw new InputMismatchException(); 
      } 
     } catch (InputMismatchException e) { 
      System.out.println("Error in the data you have entered please try again"); 

     } 
    } while (Choose != 0); 

} 

    private static void writeMenu() { 
    System.out.println("Menu"); 
    System.out.println("1: Něco pro zasmání"); 
    System.out.println("2: Kalkulačka"); 
    System.out.println("3: Rada do života"); 
    System.out.println("0: Ukončit program"); 
} 

} 
+0

你可以輸入一個字符串你不需要choose你的外循環('掃描.next()'),檢查它是否是一個數字(例如使用正則表達式),然後將其轉換爲數字 –

+1

'scan.nextInt()'會引發異常,所以您應該移動此行(和以下內容)放入'try'區塊 –

回答

1

由非數字輸入的錯誤是nextInt不在您try塊。在其他答案註冊的問題導致我這個解決方案。您需要獲取完整的行作爲輸入並將其解析爲int。現在,你還需要搭乘NumberFormatException

do { 
    try { 
     String input = scan.nextLine(); 
     int choose = Integer.parseInt(input); 
     // ... 
    catch (InputMismatchException | NumberFormatException e) { 
     System.out.println("Error in the data you have entered please try again"); 
    } 
} while (true); 

因爲你使用System.exit(0)如果輸入爲0

+0

是的,你是對的。我想這是這種情況下最好的解決方案。 –

-2

你有你的數據類型整數選擇變量。所以你不能傳遞字符或字符串作爲開關參數。

感謝

+1

問題不在於爲何發生錯誤,而在於如何捕捉它。 –

+0

是的,我同意,但最重要的是要知道他爲什麼會得到像a,b,c這樣的輸入錯誤。所以我們可以尋求解決方案。請檢查發佈的解決方案歡呼聲 – Pradeep

-1

認沽取輸入之前嘗試這樣,如果有輸入的異常類型的錯誤會在抓被抓。

package projectprucha; 

import java.util.Scanner; 
import java.io.*; 
import java.util.InputMismatchException; 

public class Projectprucha { 


public static Scanner scan = new Scanner(System.in); 

public static void main(String[] args) { 

int Choose; 

do { 

    writeMenu(); 
try{ 
    Choose = scan.nextInt(); 
    scan.nextLine(); 


     switch (Choose) { 

      case 1: 

       Joke vtip = new Joke(); 
       vtip.Napis(); 
       JokeII vtipII = new JokeII(); 
       vtipII.NapisII(); 
       break; 

      case 2: 

       Kalkulacka.staticMethod(); 
       break; 

      case 3: 

       Moudro rada = new Moudro(); 
       rada.Rekni(); 

      case 0: 
       System.out.println("You have exited the system"); 
       System.exit(0); 
      default: 
       throw new InputMismatchException(); 
     } 
} 
    } catch (InputMismatchException e) { 
     System.out.println("Error in the data you have entered please 
try again"); 

    } 
} while (Choose != 0); 

} 

private static void writeMenu() { 
System.out.println("Menu"); 
System.out.println("1: Něco pro zasmání"); 
System.out.println("2: Kalkulačka"); 
System.out.println("3: Rada do života"); 
System.out.println("0: Ukončit program"); 
} 

} 
+0

這個答案比第一個答案更糟...這不會編譯,因爲你的'try'在類體 –

相關問題