JAVAのScanner(System.in)循環入力のいくつかの問題と解決について
1094 ワード
質問:たとえば、次のようなエラーコード(入力が数字かどうかを判断し、数字でなければ再入力):
上のコードは正しいように見えますが、外部に無限ループを追加し、if文を設定します.intタイプのデータが入力されている場合は、jに値を割り当て、ループを押し出します.そうしないと、入力を続けます.
実際には間違っていますinput.hasNextInt()は、タグのintタイプのデータであるか否かを判断するだけで、タグを次の行に移動することはないので、intタイプ以外のデータを入力すると「数字を入力してください」と無限に出力され、次の判断は行われない.
正しい方法はnext()メソッドを使用してタグを次の行に移動することであり、判断時に次の行が入力した内容を直接判断し、最初に入力した内容を無限に判断することはありません.
コードは次のとおりです.
public class test {
public static void main(String[] args) {
int j=0;
Scanner input=new Scanner(System.in);
while(true){
if(input.hasNextInt()){
j=input.nextInt();
break;
}else{
System.out.println(" ");
}
}
input.close;
}
}
上のコードは正しいように見えますが、外部に無限ループを追加し、if文を設定します.intタイプのデータが入力されている場合は、jに値を割り当て、ループを押し出します.そうしないと、入力を続けます.
実際には間違っていますinput.hasNextInt()は、タグのintタイプのデータであるか否かを判断するだけで、タグを次の行に移動することはないので、intタイプ以外のデータを入力すると「数字を入力してください」と無限に出力され、次の判断は行われない.
正しい方法はnext()メソッドを使用してタグを次の行に移動することであり、判断時に次の行が入力した内容を直接判断し、最初に入力した内容を無限に判断することはありません.
コードは次のとおりです.
public class sss {
public static void main(String[] args) {
int j=0;
Scanner input=new Scanner(System.in);
while(!input.hasNextInt()){
input.next();
System.out.println(" ");
}
j=input.nextInt();
input.close();
}
}