public class Solution {
public static void main(String[] args) {
int i = 4;
double d = 4.0;
String s = "HackerRank ";
Scanner scan = new Scanner(System.in);
/* Declare second integer, double, and String variables. */
/* Read and save an integer, double, and String to your variables.*/
int sec = scan.nextInt();
double db = scan.nextDouble();
String newWord = scan.nextLine();
/* Print the sum of both integer variables on a new line. */
System.out.println(i + sec);
/* Print the sum of the double variables on a new line. */
System.out.println(d + db);
/* Concatenate and print the String variables on a new line;
the 's' variable above should be printed first. */
System.out.println(s + newWord);
scan.close();
}
}
如果String newWord = scan.nextLine();
放在int sec = scan.nextInt();
之前,它可以正常工作。
答案 0 :(得分:2)
只需将String newWord = scan.nextLine();
替换为
String newWord = scan.next();
这里:
double db = scan.nextDouble();
String newWord = scan.nextLine();
scan.nextDouble()
没有阅读所有内容,只有双倍内容
因此,scan.nextLine()
会将newWord
变量分配给当前行的其余部分,即空String
:""
。
如果String newWord = scan.nextLine();放在int sec =之前 scan.nextInt();它工作得很好。
确实因为""
是String的有效值。因此,newWord
具有""
值。
修改评论
尽量避免将nextInt()
,nextDouble()
等与nextLine()
方法混合使用。
您可以执行nextLine()
来读取空字符串并再次执行另一个nextLine()
来读取用户的输入。
或者您甚至只能使用nextLine()
数字类型,并从String
输入创建数值。以下是您的代码示例:
public static void main(String[] args) {
int i = 4;
double d = 4.0;
String s = "HackerRank ";
Scanner scan = new Scanner(System.in);
/* Declare second integer, double, and String variables. */
/* Read and save an integer, double, and String to your variables.*/
int sec = Integer.valueOf(scan.nextLine());
double db = Double.valueOf(scan.nextLine());
String newWord = scan.nextLine();
/* Print the sum of both integer variables on a new line. */
System.out.println(i + sec);
/* Print the sum of the double variables on a new line. */
System.out.println(d + db);
/* Concatenate and print the String variables on a new line;
the 's' variable above should be printed first. */
System.out.println(s + newWord);
scan.close();
}
答案 1 :(得分:0)
要了解此错误,您需要了解扫描仪的工作原理,以下是简要说明。 nextByte(),nextShort(),nextInt(),nextLong(),nextFloat(),next- Double()和next()方法称为标记读取方法,因为它们读取由分隔符分隔的标记。默认情况下,分隔符是空格字符。 令牌读取方法首先跳过任何分隔符(空格 默认情况下为字符),然后读取以分隔符结尾的标记。然后,令牌自动转换为byte,short,int,long,float或double类型的值。 对于next()方法,不执行转换。 令牌读取方法不会在令牌之后读取分隔符。 如果在令牌读取方法之后调用nextLine()方法,则此方法将读取从此分隔符开始并以行分隔符结束的字符。读取行分隔符,但它不是nextLine()返回的字符串的一部分。