2016-09-27 7 views
0

私は0-9の間の数字を入力したいと思います。この範囲外の数値(負数または9以上の数値)を入力すると、無効な入力が行われます。また、try catchブロックを使用して誤った入力タイプ(文字列)を特定し、無効な印刷もしたいと考えています。キャッチブロックが無効な入力のステートメントを印刷しない

入力を再入力する必要はありません。一度は大丈夫です。私が持っている問題は、コンパイル時に、ある、と私はこのような文字列入力を入力

  try{ 
       input = keyboard.nextInt(); 

      }catch (InputMismatchException e){ 
       guess = keyboard.nextInt(); 
       System.out.println("Invalid."); 
      } 

:ここ

import java.util.InputMismatchException; 
import java.util.Scanner; 
import java.util.Random; 

public class guessinggame 
{ 
    public static void main (String[] args) 
    { 
     int randomNumber = new Random().nextInt(10); 
     System.out.println("My number is " + randomNumber + ". "); 

     System.out.println("I’m thinking of a number between 0 and 9."); 
     System.out.println("What is your guess:"); 


     Scanner keyboard = new Scanner(System.in); 
     int guess = keyboard.nextInt(); 

      try{ 
       input = keyboard.nextInt(); 

      }catch (InputMismatchException e){ 
       guess = keyboard.nextInt(); 
       System.out.println("Invalid."); 
      } 



      if (guess < randomNumber) { 
       System.out.println("your guess was too low."); 
      }else if (guess > randomNumber){ 
       System.out.println("your guess was too high."); 
      }else if (guess == randomNumber){ 
       System.out.println("your guess was correct."); 
      }else if (guess < 0){ 
       System.out.println("Invalid."); 
      }else if (guess > 9){ 
       System.out.println("Invalid."); 
      } 
     } 
    } 

は私のtry catchブロックである:私がこれまで試してみました何

"abc"の場合、この形式の実行時エラーが発生します。

Exception in thread "main" java.util.InputMismatchException 
    at java.util.Scanner.throwFor(Scanner.java:864) 
    at java.util.Scanner.next(Scanner.java:1485) 
    at java.util.Scanner.nextInt(Scanner.java:2117) 
    at java.util.Scanner.nextInt(Scanner.java:2076) 
    at guessinggame.main(guessinggame.java:17) 

その代わりに、すべては、キャッチブロック内の文System.out.println("Invalid.");に従って、 Invalid.です。

答えて

0

この行にはint guess = keyboard.nextInt();というエラーがスローされていますが、これはtry/catchステートメントで囲まれていません。ちょうどあなたが知っている、あなたがScanner.nextInt()に電話するたびに、あなたは新しい行を求めています。

このように、ユーザーが無効な推測を入力すると、すでに作成されたif文を使用して処理します。

+0

ありがとうございました。あなたの説明は洞察力があり、try/catchステートメントの主題についての理解に役立ちました。 – sawreals

0

入力を再入力する必要はありません。一度は大丈夫です。あなたが入力を求めている

3回

int guess = keyboard.nextInt(); // here 

try{ 
    input = keyboard.nextInt(); // here 

}catch (InputMismatchException e){ 
    guess = keyboard.nextInt(); // and here 
    System.out.println("Invalid."); 
} 

最初のものは例外をスローしています。そしてその例外は捕捉されないので、アプリケーションを終了します。

あなたはこのたいようだ:あなた次第です、あなたがやりたいものは何でも、あなたが何かを行う可能性がありますcatchブロックの最後にreturnの代わりに

int guess; 
try { 
    input = keyboard.nextInt(); 
} catch (InputMismatchException e) { 
    System.out.println("Invalid."); 
    return; 
} 

を。しかし、guessが有効なintに設定されていないと、メソッドの残りのロジックは実際には適用されません。したがって、デフォルトではここでメソッドを単に終了します。

しかし、基本的に、ユーザーが入力を一度入力したい場合は、一度入力するだけです。また、例外を処理したい場合は、例外をスローするコードをtry/catchにラップして処理します。

関連する問題