我想知道为什么我无法使用代码中的变量连接文本的原因。我该如何解析此代码?

时间:2018-07-20 05:17:07

标签: java string-concatenation

我正在尝试解决字符串连接中的问题,但是我不明白为什么当我使用“ +”运算符时为什么它只给我这样的输出。谁能帮我澄清我的问题。我的代码是

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是学习和练习编码的最佳场所!

3 个答案:

答案 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(“ H​​ackerrank” +“” + sc.nextLine());

然后您还将获得预期的输出。

意味着您需要编写以下几行: c = sc.nextLine(); c = sc.nextLine(); 然后它将考虑变量c中的预期行。