猿问

有人可以帮我理解为什么我需要一个 IF 和 WHILE 来回答这个问题吗?

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


这是问题-


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


这是答案-


if(input.hasNext())

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

    while (input.hasNext()){

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

    }

}

我的问题是,为什么需要一个 if 和 while 语句。我知道我需要先阅读该行,然后将其打印出来。为什么仅仅拥有以下内容还不够:


while(input.hasNext()){

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

}

谢谢


繁花不似锦
浏览 85回答 4
4回答

倚天杖

从集合中创建带有分隔符的字符串时遇到的一个常见问题是如何避免多余的前导或尾随空格。这就是额外的 if 语句所达到的效果。还有其他几种方法可以解决这个问题,下面我提供两种选择。你也可以这样做:// first build the output string using a StringBuilderStringBuilder sb = new StringBuilder();while(input.hasNext()) {    sb.append(input.nextLine()).append(" ");      }    // if there was input, the StringBuilder will have an extra space at the endif (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;    }}

慕丝7291255

唯一的尊重是在第一个代码中if(input.hasNext())    System.out.print(input.nextLine());    while (input.hasNext()){        System.out.print(" " + input.nextLine());    }}您将打印 " " -space- 然后是字符串,但在第二个中,您将从行首开始,然后它会在单词之间放置空格,所以“空间”第一第二第三是从first second third // 开头没有空格

汪汪一只猫

问题是输出将以空格开头。您可以将空间放在最后,它会正常工作:System.out.print(input.nextLine() + " ");如果这仍然导致问题,也许这会起作用:while(input.hasNext()){    System.out.print(input.nextLine());    if(input.hasNext())        System.out.print(" ");}我没有测试过它,但它应该在除最后一行之外的每一行附加一个空格。

拉莫斯之舞

唯一明显的区别是正确答案不会产生以空格开头的输出。使用此文件:foo bar baz您的代码将具有以下输出(注意“foo”前面的空格): foo bar baz答案的代码将有这个(“foo”前面没有空格):foo bar baz
随时随地看视频慕课网APP

相关分类

Java
我要回答