2016-12-12 8 views
0

間違ったユーザー入力を処理する先読み方法を含むwhileループを使用するメソッドを作成しようとしています。または文字列を入力します。私は例外を投げたり、try {} catch {}を使ってこれをやろうとしています。可能なら。私はこれらを使用しないポストを見つけていないし、すべての私の試みはこれまで失敗している。基本的な考え方が有効です。ユーザー入力エラー、投げられない例外またはtry {} catch {}を使用しています

は、入力が正しいかどう

import java.util.*; 
public class UserErrors{ 

    public static Scanner console = new Scanner(System.in); 
    public static void main(String[]args){ 
    String s = "Enter a integer between 1-10: "; 
    get(s); 
    } 
    public static int get(String prompt){ 

    System.out.print(prompt); 
    while(console.hasNext()){ 
     while(!console.hasNextInt()){ 
     console.next(); 
     System.out.println("Invalid data type"); 
     System.out.print(prompt); 
     } 
     if(console.nextInt() > 10 || console.nextInt() <1){ 
     System.out.println("not in range"); 
     System.out.print(prompt); 
     } 
    } 
    return console.nextInt(); 
    } 
} 

が、それは私も他のいくつかの失敗を削除

import java.util.*; 
public class UserErrors{ 
    public static Scanner console = new Scanner(System.in); 
    public static void main(String[]args){ 
    String s = "Enter a integer between 1-10: "; 
    get(s); 
    } 
    public static int get(String prompt){ 

    System.out.print(prompt); 
    boolean b = false; 
    while(!b){ 
     if(!console.hasNextInt()){ 
     console.next(); 
     System.out.println("Invalid data type"); 
     System.out.print(prompt); 
     console.nextInt(); 
     } 
     else if(console.nextInt() < 10 && console.nextInt() >1){ 
     b = true; 
     } 
     else{ 
     System.out.println("not in range"); 
     System.out.print(prompt); 
     console.nextInt(); 
     } 
    } 
    return console.nextInt(); 
    } 
} 

を停止する前に3回帰属することが正しい答えを必要と停止しません。修正するには何が必要ですか(基本的な考え方はありますか?)

if(console.nextInt() > 10 || console.nextInt() <1){ ... } 

変更この行に:

答えて

2

そこはエラーだあなたは(... console.nextを再利用することはできません

int i = console.nextInt(); 
if(i > 10 || i <1){ ... } 

)ちょうどそのような:)

+0

そこにエラーはありません:if(console.nextInt()> 10 || console.nextInt()<1){...}! –

0

各nextIntコールはブロッキングコールであり、ユーザーの入力を待機します。コードについて あなたはラインの下の書き込み:

if(console.nextInt() < 10 && console.nextInt() >1) 

本質的に、コンソールは、必ずしも、第1のユーザ入力を待つ10に対してそれを確認した後(2番目の入力がある)任意とすることができる次の入力を待ちますそれを待ってから、最後にif条件に入る。

コンソール入力が常に先行取られ、私たちのローカル変数に代入し、それは以下のようなあなたの条件をチェックする必要がありますする必要があります。

int userInput = console.nextInt(); 

その後、チェックはユーザ入力変数を下回る:

if(userInput < 10 && userInput >1) 
0

スキャナクラスのメソッドnextInt()は、標準的な出口を読み取る

import java.util.*; 

public class UserErrors{ 
    public static Scanner console = new Scanner(System.in); 
    public static void main(String[]args){ 
    String s = "Enter a integer between 1-10: "; 
    get(s); 
    } 

    public static int get(String prompt){  
    boolean b = false; 
    int number; 
    while(!b){ 
     System.out.print(prompt); 
     if(!console.hasNextInt()){ 
     console.next(); 
     System.out.println("Invalid data type"); 
     System.out.print(prompt); 
     console.nextInt(); 
     }else { 
     number = console.nextInt(); 
     if(nb<1 || nb>10){ 
      System.out.println("not in range"); 
     }else{ 
      b=true; 
     } 
     } 
    } 
    return nb; 
    } 
} 
関連する問題