关于java如何输入的一个问题
/*
下面的代码我想如果是输入一串数字则停止输入,如果输入的不符合要求就重新输入,但是我发现输入错误之后,该程序就
不给我继续输入的机会了,就不停的死循环了。
*/
package work4;
import java.util.InputMismatchException;
import java.util.Scanner;
public class Test1
{
public static void main(String[] args)
{
Scanner sc = new Scanner(System.in);
System.out.println("请输入你要转化的一串数字");
Long inputNum;
while (false == sc.hasNextLong()) {
try {
inputNum = sc.nextLong();
}
catch (InputMismatchException e) {
e.printStackTrace();
}
finally {
System.out.println("请输入数字");
}
}
}
}
------最佳解决方案--------------------package com.jcz.test;
import java.util.InputMismatchException;
import java.util.Scanner;
public class Ddd
{
public static void main(String[] args)
{
Scanner sc = new Scanner(System.in);
System.out.println("请输入你要转化的一串数字");
while (true) {
try {
long input = sc.nextLong();
System.out.println("您输入的是"+input);
break;
}
catch (InputMismatchException e) {
e.printStackTrace();
sc.nextLine();
System.out.println("请重新输入数字");
continue;
}
}
}
}
------其他解决方案--------------------下面的程序是否符合:
import java.util.InputMismatchException;
import java.util.Scanner;
import java.util.regex.Pattern;
public class Test2 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String inputNum = null;
Pattern pattern = Pattern.compile("[0-9]*");
do {
System.out.println("请输入你要转化的一串数字");
inputNum = sc.nextLine();
} while (!pattern.matcher(inputNum).matches());
}
}
结果:
请输入你要转化的一串数字
2324da
请输入你要转化的一串数字
aa
请输入你要转化的一串数字
1234324234543
------其他解决方案--------------------你用while (false == sc.hasNextLong()) ,在你输入不是数字的时候,很明显这个一直要执行的,这样就进入死循环了,把while 换成if就不会死循环了。
------其他解决方案--------------------
难道说在永远为真的while循环中,try中的语句只会执行一次么
------其他解决方案--------------------
为什么我把你代码中catch中的sc.nextLine()注释掉,就会发生和我一样的问题呢?
能解释一下深层次的原因么?
------其他解决方案--------------------