java中检测输入是否合法的方法

  • Post author:
  • Post category:java


public class TestInput {
	public static void main(String[] args) {

		System.out.println("请输入一个整数:");
		int num = 0;

		while (true) {
			Scanner input = new Scanner(System.in);
			if (input.hasNextInt()) {

				num = input.nextInt();
				break;
			} else {
				System.out.println("你的输入有误,请重新输入一个整数:");

			}
		}
		System.out.println(num);
	}
}
请输入一个整数:
0.3
你的输入有误,请重新输入一个整数:
sdad
你的输入有误,请重新输入一个整数:
sdadadade
你的输入有误,请重新输入一个整数:
.;'
你的输入有误,请重新输入一个整数:
1.23.
你的输入有误,请重新输入一个整数:
2
2

最近java输入的时候,经常碰到输入不合理引发的潜在bug,于是写了一个检测java输入是否合法的方法;其他类型输入应该类似。不清楚为什么每次都要在while循环中每次都要new一个scanner类。。但是不这样就一直循环“请重新输入一个整数”。。。

在一番探索后,并且看到了一位大佬的博客,获得了些许启发,

Java中Scanner用法总结_Megustas_JJC的博客-CSDN博客_java scanner

可能像大佬所写,输出完的回车键,被next()收留了下来,所以导致了后边的结果,于是我对我的代码做了修改。

public class TestInput {
	public static void main(String[] args) {
		int[] a = new int[5];
		System.out.println("请输入一个整数:");
   Scanner input = new Scanner(System.in);
		for (int i = 0; i < a.length; i++) {
			
			if (input.hasNextInt()) {

				a[i] = input.nextInt();
				
				// break;
			} else {
				System.out.println("你的输入有误,请重新输入一个整数:");
				
				String string = input.next();
				i--;
			}
		}
		System.out.println(Arrays.toString(a));
	}
}

经测试,这段代码不会出现任何问题,并且将new scanner 也放到了循环体外边,在用debug调试的过程中我发现 了每次输出的“你的输出有误。。。。”这一句话,像一个孤儿一样没人收留,到了后边的循环貌似是被后来的if (input.hasNextInt())判断为不符合条件还是怎么样?于是又在输出else循环体。所以使用了一个input.next()将这句话装进去,让这个孤儿有了家。所以后边的循环变得正常了。



版权声明:本文为weixin_42051673原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。