我正在使用'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();
结果: 工作正常!!
为什么订单在这里发挥作用?
答案 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