使用扫描仪

时间:2017-04-12 17:58:35

标签: java io java.util.scanner inputstream

我正在使用'Scanner'做一些基本的java程序。我读了Integer,Double和String。

我在使用scan for String和其他扫描程序(如int和double)时遇到了一些问题。

声明部分:

    Scanner scan = new Scanner(System.in);

    int i2;
    double d2;
    String s2;

订单#1:

    i2 = scan.nextInt();
    d2 = scan.nextDouble();
    s2 = scan.nextLine();     

结果: 编译器等待获取i2和d2的输入但不等待s2的输入。它立即执行s2 = scan.nextLine();之后的行。当我调试时,s2为空。

订单#2:

    i2 = scan.nextInt();
    s2 = scan.nextLine();
    d2 = scan.nextDouble();     

结果: 编译器这次等待获取i2和 s2 的输入。当我输入hello时,它会抛出错误。

1
hello
Exception in thread "main" java.util.InputMismatchException
    at java.util.Scanner.throwFor(Scanner.java:864)
    at java.util.Scanner.next(Scanner.java:1485)
    at java.util.Scanner.nextDouble(Scanner.java:2413)
    at HelloWorld.main(HelloWorld.java:18)

订单#3:

    s2 = scan.nextLine();
    i2 = scan.nextInt();
    d2 = scan.nextDouble();     

结果: 工作正常!!

为什么订单在这里发挥作用?

2 个答案:

答案 0 :(得分:1)

尝试拨打function custom_set_email_value($recipients, $values, $form_id, $args){ global $post; $profil_obj = get_field('profil_obj', $post->ID); // If I put the ID directly (10 for example), it works if( $form_id == get_field('popup_form_id', 'option') && $args['email_key'] == get_field('popup_email_id', 'option') ){ if($profil_obj) { foreach( $profil_obj as $post) { setup_postdata($post); $recipients[] = get_field('profil_email', $post->ID); } } wp_reset_postdata(); } return $recipients; } add_filter('frm_to_email', 'custom_set_email_value', 10, 4); 而不是next()来阅读字符串。

答案 1 :(得分:1)

执行与订单更改的差异是由于 新行 不 strong>由nextInt()nextDouble()next()nextFoo()方法使用。

因此,无论何时在任何这些方法之后拨打nextLine(),都会消耗 换行符 ,而实际上会跳过该声明

修复很简单,在nextFoo()之前不要使用nextLine()方法。试试: -

i2 = Integer.parseInt(scan.nextLine());
d2 = Double.parseDouble(scan.nextLine());
s2 = scan.nextLine();

或者,你可以通过

消费 新行
i2 = scan.nextInt();
d2 = scan.nextDouble();
scan.nextLine(); //---> Add this before the nextLine() call
s2 = scan.nextLine();

订单#3 工作正常,因为nextLine()是第一个声明,因此没有 剩余消费的角色。

相关:Scanner is skipping nextLine() after using next(), nextInt() or other nextFoo() methods