java中非数值输入的无限循环

java中非数值输入的无限循环,java,Java,这是一个简单的java函数,以双精度输入。它接受一个输入,然后首先检查该值是否为非数字。然后检查该值是否大于0 我面临的问题是,每次输入非数字输入时,它都会运行一个无限循环,只打印“输入一个大于或等于1.0的数字:” double-getInput(双n){ 扫描仪kbd=新扫描仪(System.in); 布尔标志=假; 布尔检查=假; while(!flag){ System.out.println(“输入一个大于或等于1.0:”); 试一试{ n=kbd.nextDouble(); 如果(n

这是一个简单的java函数,以双精度输入。它接受一个输入,然后首先检查该值是否为非数字。然后检查该值是否大于0

我面临的问题是,每次输入非数字输入时,它都会运行一个无限循环,只打印
“输入一个大于或等于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 | | 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 | | 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直到输入正确的值。因此,即使您下次输入正确的输入,您的代码也无法工作?我将在几分钟内添加新代码,并说明发生这种情况的原因。请查看答案,如果您不了解其中的任何部分,请告诉我它工作正常…非常感谢,,,我了解解决方案