我正在解决这个hackerrank 30天的代码挑战。代码如下:
import java.util.*;
public class jabcexample1 {
public static void main(String[] args) {
int i = 4;
double d = 4.0;
String s = "HackerRank ";
/* Declare second integer, double, and String variables. */
try (Scanner scan = new Scanner(System.in)) {
/* Declare second integer, double, and String variables. */
int i2;
double d2;
String s2;
/* Read and save an integer, double, and String to your variables.*/
i2 = scan.nextInt();
d2 = scan.nextDouble();
scan.nextLine(); // This line
s2 = scan.nextLine();
/* Print the sum of both integer variables on a new line. */
System.out.println(i + i2);
/* Print the sum of the double variables on a new line. */
System.out.println(d + d2);
/* Concatenate and print the String variables on a new line;
the 's' variable above should be printed first. */
System.out.println(s.concat(s2));
}
}
}
在这段代码中,我添加了一个额外的行scan.nextLine();
,因为没有它,编译器甚至不会注意到s2 = scan.nextLine();
的下一行。为什么编译器在没有编写s2=scan.nextLine();
的情况下没有注意到scan.nextLine();
?
答案 0 :(得分:3)
这与编译器无关,也与Scanner的行为无关。
如果您阅读Java文档,您将看到Sanner.nextLine()
使此扫描程序超过当前行并返回该输入 被跳过了。此方法返回当前行的其余部分, 排除末尾的任何行分隔符。该职位设定为 下一行的开头。
现在你可能想知道在你打电话后剩下的是什么了
i2 = scan.nextInt();
d2 = scan.nextDouble();
在这种情况下,它是回车符。调用scan.nextLine()
读取这些字符并将位置设置为下一行的开头。