-1

Scannerクラスを使用し、try-catchブロックを使用してInputMismatchExceptionsを捕捉するプログラムを作成しています。この私が書いたものです:正しいときまで例外をキャッチする方法

public class StudentInfo{ 

public static void main(String[] args){ 
    Scanner scnr = new Scanner(System.in); 
    int creditHours = 0; 
    try 
    { 
     System.out.println("Please enter the number of credit hours that you currently have (do not count credit hours from classes that you are currently attending this semester)"); 
     creditHours = scnr.nextInt(); 
    } 
    catch(InputMismatchException e){ 
     System.out.println("CLASSIFICATION ERROR: NUMBER NOT RECOGNIZED. ENTER AN INTEGER FOR CREDIT HOURS"); 
     Scanner input = new Scanner(System.in); 
     creditHours = input.nextInt(); 
    } 
    String studentClass = checkStudent (creditHours); 
    System.out.println("Official Student Classification: " + studentClass); 
    } 

try-catchブロックは、私は例えば24.5に最初の頃を置けば、それは例外をキャッチし、ユーザーが数を再入力している、のように約1時間の作品彼らが持っていたクレジット時間ですが、2回目に非整数を再入力すると、エラーを再び捕らえて適切なメッセージを送信できません。だから本質的に、何度も何度も例外をキャッチしてエラーメッセージを出す方法があれば、私は思っていました。 do-whileループやwhileステートメントを使ってみましたが、うまくいきません。また、キャッチブロックに新しいスキャナ変数を作成しました。なぜなら、何らかの理由でエラーメッセージを出した後に新しい整数を入力できないからです。それは文字どおり入力したエラーをスローし、JavaのInputMismatchExceptionエラーを出すように進みます。

はここでwhileループを使用しての私の試みです:

int creditHours = 0; 
    while(creditHours <= 0){ 
    try 
    { 
     System.out.println("Please enter the number of credit hours that you currently have (do not count credit hours from classes that you are currently attending this semester)"); 
     creditHours = scnr.nextInt(); 
    } 
    catch(InputMismatchException e){ 
     System.out.println("CLASSIFICATION ERROR: NUMBER NOT RECOGNIZED. ENTER AN INTEGER FOR CREDIT HOURS"); 
     Scanner input = new Scanner(System.in); 
     creditHours = input.nextInt(); 
    } 
    } 

    String studentClass = checkStudent (creditHours); 
    System.out.println("Official Student Classification: " + studentClass); 
    } 
+1

のtry/catchがループではありません。ループ動作が必要な場合は、ループを追加する必要があります。例えばwhile(1){try ... catch ...} ' –

+0

@MarcB私は私の質問で言ったように、私はすでにしばらくの間ループを行い、どちらもうまくいきませんでした。まったく同じことです。 – user2161312

+0

だから、ループの試行を見せてください。 –

答えて

0

あなたのコードを再実行するために、ループであることをのtry-catchを必要としています。

はこれを試してみてください。

public class StudentInfo{ 

public static void main(String[] args){ 

    int creditHours = 0; 
    boolean ok = false; 
    System.out.println("Please enter the number of credit hours that you currently have (do not count credit hours from classes that you are currently attending this semester)"); 

    while (!ok) 
    { 
     try 
     { 
      Scanner scnr = new Scanner(System.in); 
      creditHours = scnr.nextInt(); 
      ok = true; 
     } 
     catch(InputMismatchException e){ 
      System.out.println("CLASSIFICATION ERROR: NUMBER NOT RECOGNIZED. ENTER AN INTEGER FOR CREDIT HOURS"); 
     } 
    } 


    String studentClass = checkStudent (creditHours); 
    System.out.println("Official Student Classification: " + studentClass); 
    } 
+0

ありがとうございました!!!それは働いて、私はそれを完全に理解しています。そんなにありがとう! – user2161312

関連する問題