我正在尝试解决字符串连接中的问题,但是我不明白为什么当我使用“ +”运算符时为什么它只给我这样的输出。谁能帮我澄清我的问题。我的代码是
public static void main(String[] args) {
int a;
double b;
String c;
Scanner sc=new Scanner(System.in);
a=sc.nextInt();
b=sc.nextDouble();
c=sc.nextLine();
System.out.println(a+4);
System.out.println(b+4.0);
System.out.println("Hackerrank"+" "+c);
}
我的输入是:
12
4.0
是学习和练习编码的最佳场所!
我的输出是:
16
8.0
Hackerrank
但预期输出为:
16
8.0
HackerRank是学习和练习编码的最佳场所!
答案 0 :(得分:1)
问题不在于串联。这是c=sc.nextLine();
行。
当您使用c=sc.nextLine();
时,JVM在b=sc.nextDouble();
行中分配值,但在双精度值之后。
示例:根据您的输入,
12
4.0 [
c=sc.nextLine();
行读取了此部分。在两次输入之后]是学习和练习编码的最佳场所!
因此请尝试此代码。跳过上面提到的行。
public static void main(String[] args) {
int a;
double b;
String c;
Scanner sc=new Scanner(System.in);
a=sc.nextInt();
b=sc.nextDouble();
sc.nextLine(); // This line skips the part, after the double value.
c=sc.nextLine();
System.out.println(a+4);
System.out.println(b+4.0);
System.out.println("Hackerrank"+" "+c);
}
答案 1 :(得分:0)
当您调用nextLine()方法时,扫描仪会将扫描仪移至下一行。但这返回它跳过的行。如果您像单行一样提供输入
“ 12 4.0是学习和练习编码的最佳场所!”
或第一行中的“ 12”,然后按Enter
“ 4.0是学习和练习编码的最佳场所!”
您将获得理想的结果。
来自JavaDOC
/ ** *将此扫描仪前进到当前行并返回输入 *被跳过。 * *此方法返回当前行的其余部分,不包括任何行 *分隔符结尾。该位置设置为下一个开始 *行。 * *
由于此方法会继续搜索输入内容 *对于行分隔符,它可以缓冲所有搜索的输入 *如果没有行分隔符,则跳过该行。 * * @返回被跳过的行 * @throw NoSuchElementException如果找不到行 *如果此扫描器关闭,则抛出IllegalStateException * /
答案 2 :(得分:0)
仅打印c,它给出空白值。它没有为c分配值。 System.out.println(c);
如果您使用
,则+运算符不存在问题System.out.println(“ Hackerrank” +“” + sc.nextLine());
然后您还将获得预期的输出。
意味着您需要编写以下几行: c = sc.nextLine(); c = sc.nextLine(); 然后它将考虑变量c中的预期行。