1
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;
            }
        }       
    }
}

I'm working with learning how to catch exceptions. (I know about the try / catch)

Question:

How does scanner have more double tokens when it has just been initialized with no input

4

4 回答 4

1

扫描仪刚刚在没有输入的情况下初始化时如何拥有更多的双令牌?

您的代码不会使用“无输入”初始化扫描仪。它用 初始化它System.in

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


顺便一提:

   while (0 == 0) {

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

  1. 弄清楚代码到底在做什么,以及
  2. 想知道作者是否不懂基本的Java,或者在编码时一直在使用非法物质...... :-)
于 2013-06-23T05:22:11.163 回答
0

System.in是一个InputStream。从 javadoc 中,读取“阻塞直到输入数据可用、检测到流结束或引发异常”。

于 2013-06-23T05:21:12.330 回答
0

它没有。检查一下:我在您的代码中添加了两个打印语句。如果你运行它,你会看到 hasNextDouble() 方法在你输入一个值之前不会返回任何东西。因此,如果您键入双精度,则 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;
        }
    }
}
于 2013-06-23T05:21:37.263 回答
0

首先,它while(true)while(0==0). 当它打印“输入小计”时你可以给出一个双倍(例如 3.0)。然后sc.hasNextDouble()变为真,无论 if 语句中的代码运行什么。如果你给出一个不是双倍的输入( ex 'k') 然后sc.hasNextDouble()变为 false 并且 else 中的任何内容都在运行。

于 2013-06-23T05:21:48.463 回答