java中非数值输入的无限循环
这是一个简单的java函数,以双精度输入。它接受一个输入,然后首先检查该值是否为非数字。然后检查该值是否大于0 我面临的问题是,每次输入非数字输入时,它都会运行一个无限循环,只打印java中非数值输入的无限循环,java,Java,这是一个简单的java函数,以双精度输入。它接受一个输入,然后首先检查该值是否为非数字。然后检查该值是否大于0 我面临的问题是,每次输入非数字输入时,它都会运行一个无限循环,只打印“输入一个大于或等于1.0的数字:” double-getInput(双n){ 扫描仪kbd=新扫描仪(System.in); 布尔标志=假; 布尔检查=假; while(!flag){ System.out.println(“输入一个大于或等于1.0:”); 试一试{ n=kbd.nextDouble(); 如果(n
“输入一个大于或等于1.0的数字:”
double-getInput(双n){
扫描仪kbd=新扫描仪(System.in);
布尔标志=假;
布尔检查=假;
while(!flag){
System.out.println(“输入一个大于或等于1.0:”);
试一试{
n=kbd.nextDouble();
如果(n>=0 | | n<0)
检查=正确;
}捕获(输入不匹配异常){
打印错误(“无效数据类型(非数字)”;
}
如果(检查==true){
if(n<0)
System.out.println(“无效值(太小)”;
其他的
flag=true;
}
}
返回n;
}
kbd.nextDouble
不使用新行字符,因此这些字符将重复传递到while循环中
在catch块中,您可以传递kbd.nextLine(),而不只是抛出异常,以便为下一个循环准备好输入方法
catch(InputMismatchException ex)
{
System.out.println("Invalid Data Type (not Numeric)");
kbd.nextLine();
}
以下是您的完整代码:
double getInput(double n)
{
Scanner kbd = new Scanner( System.in );
boolean flag =false;
boolean check = false;
while(!flag)
{
System.out.println("Enter a number greater or equal to 1.0: ");
try
{
n = kbd.nextDouble();
if(n>=0 || n<0)check = true;
}
**catch(InputMismatchException ex)
{
System.out.println("Invalid Data Type (not Numeric)");
kbd.nextLine();
}**
if(check==true)
{
if(n<0)
System.out.println("Invalid value (too small)");
else
flag = true;
}
}
return n;
}
double-getInput(双n)
{
扫描仪kbd=新扫描仪(System.in);
布尔标志=假;
布尔检查=假;
while(!flag)
{
System.out.println(“输入一个大于或等于1.0:”);
尝试
{
n=kbd.nextDouble();
如果(n>=0 | | nkbd.nextDouble
不使用新行字符,则这些字符将重复传递到while循环中
在catch块中,您可以传递kbd.nextLine(),而不只是抛出异常,以便为下一个循环准备好输入方法
catch(InputMismatchException ex)
{
System.out.println("Invalid Data Type (not Numeric)");
kbd.nextLine();
}
以下是您的完整代码:
double getInput(double n)
{
Scanner kbd = new Scanner( System.in );
boolean flag =false;
boolean check = false;
while(!flag)
{
System.out.println("Enter a number greater or equal to 1.0: ");
try
{
n = kbd.nextDouble();
if(n>=0 || n<0)check = true;
}
**catch(InputMismatchException ex)
{
System.out.println("Invalid Data Type (not Numeric)");
kbd.nextLine();
}**
if(check==true)
{
if(n<0)
System.out.println("Invalid value (too small)");
else
flag = true;
}
}
return n;
}
double-getInput(双n)
{
扫描仪kbd=新扫描仪(System.in);
布尔标志=假;
布尔检查=假;
while(!flag)
{
System.out.println(“输入一个大于或等于1.0:”);
尝试
{
n=kbd.nextDouble();
如果(n>=0 | | n从扫描仪读取双倍值,则不会读取行尾
n = kbd.nextDouble();
因此,扫描器对象将有一些内容要读取,除非您得到结束调用的行
kbd.nextLine();
在异常发生后执行此操作的逻辑点
catch (InputMismatchException ex) {
System.err.print("Invalid Data Type (not Numeric)");
kbd.nextLine(); ///here!!!
}
从扫描仪读取双精度值不会读取行尾
n = kbd.nextDouble();
因此,扫描器对象将有一些内容要读取,除非您得到结束调用的行
kbd.nextLine();
在异常发生后执行此操作的逻辑点
catch (InputMismatchException ex) {
System.err.print("Invalid Data Type (not Numeric)");
kbd.nextLine(); ///here!!!
}
我想输入正确的值,直到输入正确的值。因此,即使您下次输入正确的值,您的代码也不起作用?我将在几分钟后添加新代码,并说明发生这种情况的原因。请查看答案,如果您不了解其中的任何部分,请告诉我它是否工作正常……非常感谢,,,我了解我要采用的解决方案t直到输入正确的值。因此,即使您下次输入正确的输入,您的代码也无法工作?我将在几分钟内添加新代码,并说明发生这种情况的原因。请查看答案,如果您不了解其中的任何部分,请告诉我它工作正常…非常感谢,,,我了解解决方案