有人可以帮助我理解为什么我需要IF和WHILE才能获得此答案吗?

时间:2019-02-28 13:12:35

标签: java

快速提问-我已找到此测验问题的正确答案,但我并不完全理解。

这是问题-

给出一个名为input的Scanner参考变量,该变量已与由一系列行组成的输入源相关联,编写读取每一行所需的代码,并将它们全部打印在一行中,并用空格隔开。

这是答案-

if(input.hasNext())
    System.out.print(input.nextLine());
    while (input.hasNext()){
        System.out.print(" " + input.nextLine());
    }
}

我的问题是,为什么需要一个if and while语句。我了解我需要先阅读该行,然后再打印出来。为什么仅仅拥有:

while(input.hasNext()){
    System.out.print(" " + input.nextLine());
}

谢谢

5 个答案:

答案 0 :(得分:6)

唯一值得注意的区别是,正确答案不会产生以空格开头的输出。

使用此文件:

foo
bar
baz

您的代码将具有以下输出(“ foo”前面的注意空间):

 foo bar baz

答案的代码将包含以下内容(“ foo”前面没有空格):

foo bar baz

答案 1 :(得分:1)

在使用集合中的分隔符创建字符串时遇到的一个常见问题是如何避免多余的前导或尾随空格。这就是额外的if语句所实现的。还有其他几种方法可以解决此问题,下面我提供了两种选择。

您也可以这样做:

// first build the output string using a StringBuilder
StringBuilder sb = new StringBuilder();
while(input.hasNext()) {
    sb.append(input.nextLine()).append(" ");      
}    
// if there was input, the StringBuilder will have an extra space at the end
if (sb.length() > 0) {
    // in that case remove the space and print the result
    sb.deleteCharAt(sb.length() - 1);
    System.out.println(sb);
}

或更有趣的是,递归解决方案:

private String read(Scanner input) {
    if (!input.hasNext()) {
        return "";
    }
    String head = input.nextLine();
    if (input.hasNext()) {            
        return head + " " + read(input);
    }
    else {
        return head;
    }
}

答案 2 :(得分:0)

问题是输出将以空格开头。 您可以将空格放在最后,这样就可以了:

System.out.print(input.nextLine() + " ");

如果这仍然会导致问题,则可能会起作用:

while(input.hasNext()){
    System.out.print(input.nextLine());

    if(input.hasNext())
        System.out.print(" ");
}

我还没有测试过,但是它应该在除最后一行之外的所有行上都添加一个空格。

答案 3 :(得分:0)

这是另一种方法(我找不到最初看到类似用法的位置):

String spacer = "";
while(input.hasNext()){
    System.out.print(spacer + input.nextLine());
    spacer = " ";
}

答案 4 :(得分:0)

唯一的区别是在第一个代码中

if(input.hasNext())
    System.out.print(input.nextLine());
    while (input.hasNext()){
        System.out.print(" " + input.nextLine());
    }
}

您将打印“” -space-然后是字符串,但是在第二个字符串中,您将从行首开始,然后在单词之间放置空格

  

“空格”第一第二第三

不同于

  

第一秒第三// //开头没有空格