Scanner Class~hasNextDouble();

时间:2013-06-23 05:09:36

标签: java java.util.scanner

package pkgswitch;
import java.util.Scanner;
public class Switch {
    public static void main(String[] args) {
        double subtotal = 0.0;
        Scanner sc = new Scanner(System.in);
        outerloop:
        while(0==0){
            System.out.print("Enter subtotal:   ");
            if (sc.hasNextDouble())
            {
                subtotal=sc.nextDouble();
            }
            else
            {
                sc.nextLine();
                System.out.println("Error!");
                continue outerloop;
            }
        }       
    }
}

我正在学习如何捕捉异常。 (我知道try / catch

问题:

如果扫描仪在没有输入的情况下进行初始化时,如何获得更多的双重标记

4 个答案:

答案 0 :(得分:1)

  

如果扫描仪在没有输入的情况下进行初始化后,如何获得更多的双重标记?

您的代码未使用"无输入"初始化扫描仪。它使用System.in初始化它。

实际发生的是sc.hasNextDouble()尝试从输入流中读取和缓冲字符...如果用户尚未键入它们则阻止。当方法有足够的字符来确定它是否具有有效的double令牌时,它会返回true ...或false


顺便说一下:

   while (0 == 0) {

很傻。请不要这样做。它会导致读者浪费他/她的时间

  1. 弄清楚代码到底在做什么,
  2. 想知道作者是否不了解基本的Java,或者在编码时一直使用非法物质......: - )

答案 1 :(得分:0)

System.inInputStream。从javadoc中,读取“块直到输入数据可用,检测到流的末尾,或者抛出异常”。

答案 2 :(得分:0)

没有。看看这个:我在你的代码中添加了两个打印语句。如果你运行它,你会看到方法hasNextDouble()在输入值之前不会返回任何内容。因此,如果你键入一个double,那么hasNextDouble()将返回true,程序会将小计设置为该值(同样,不确定,但在我看来,你可能想要添加到小计而不是设置它的值)。

public static void main(String[] args) {
    double subtotal = 0.0;
    Scanner sc = new Scanner(System.in);
    outerloop:
    while(0==0){
        System.out.print("Enter subtotal:   ");
        if (sc.hasNextDouble())
        {
            System.out.println("has next double."); /* added */
            subtotal=sc.nextDouble();
            System.out.println("read double: "+subtotal);
        }
        else
        {
            System.out.println("no next double"); /* added */
            sc.nextLine();
            System.out.println("Error!");
            continue outerloop;
        }
    }
}

答案 3 :(得分:0)

首先,while(true)while(0==0)更好。当它打印“输入子总数”时,你可以给出一个双精度(前3.0)。然后sc.hasNextDouble()变为真,无论if语句中的代码如何运行。如果你给出的输入不是double(ex'k'),那么sc.hasNextDouble()就会变为false而其他内容正在运行。