Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java.util.Scanner:为什么我的nextDouble()不提示?_Java_Java.util.scanner - Fatal编程技术网

java.util.Scanner:为什么我的nextDouble()不提示?

java.util.Scanner:为什么我的nextDouble()不提示?,java,java.util.scanner,Java,Java.util.scanner,抛出InputMismatchException后,为什么我的程序不提示输入D因为如果扫描器.nextDouble()失败,它会将令牌留在队列上(然后会一次又一次地读取令牌,导致它一次又一次地失败) 请尝试以下操作: import java.util.*; public class June16{ public static void main(String[] args){ Scanner kb = new Scanner(System.in); do

抛出InputMismatchException后,为什么我的程序不提示输入D

因为如果扫描器.nextDouble()失败,它会将令牌留在队列上(然后会一次又一次地读取令牌,导致它一次又一次地失败)

请尝试以下操作:

import java.util.*;

public class June16{
    public static void main(String[] args){
        Scanner kb = new Scanner(System.in);
        double b=0;
           boolean checkInput = true;
        do{
            try{
                System.out.println("Input b : ");
                b = kb.nextDouble();
                checkInput = false;
            }catch(InputMismatchException ime){
            }
        }while(checkInput);
    }
}
}

来自:

当扫描器抛出InputMismatchException时,扫描器将不会传递导致异常的令牌,因此可以通过其他方法检索或跳过该令牌


这就是为什么如果您没有输入有效的double,您将进入一个无限循环。处理异常时,使用
kb.next()

移动到下一个标记,这是因为nextDouble将采用您输入的十进制数字,但仍有一个您输入的回车符未被扫描仪读取。下次循环时,它将读取输入,但请稍候!那里有一辆马车返回,所以。。。不需要扫描任何东西。它只处理回车。当然,程序发现它不是double,因此您会得到一个异常。 你怎么修理它?好的,让它扫描下一个double(即next())留下的任何剩余内容,然后再次扫描下一个double

try {
    // ...
} catch (InputMismatchException ime) {
    kb.next();  // eat the malformed token.