2017-06-21 7 views
1

私の先生はコードの期待通りに欲しいと思っています。間違った入力の前に保護し、私は何かを持っている私のコードにこれを置く必要がありますが、私は、プログラムが落ちるような手紙を入れれば正しく動作しません。手紙を書くとJavaの期待が下がる

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'がクラス本体にあるのでコンパイルされません –

関連する問題