JAVAのScanner(System.in)循環入力のいくつかの問題と解決について

1094 ワード

質問:たとえば、次のようなエラーコード(入力が数字かどうかを判断し、数字でなければ再入力):
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();
	}
}