为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

繁花不似锦 2022-07-14 17:13:24
快速提问 - 我已经找到了这个测验问题的正确答案,但我并不完全理解。这是问题-给定一个名为 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());}谢谢
查看完整描述

4 回答

?
倚天杖

TA贡献1828条经验 获得超3个赞

从集合中创建带有分隔符的字符串时遇到的一个常见问题是如何避免多余的前导或尾随空格。这就是额外的 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;

    }

}



查看完整回答
反对 回复 2022-07-14
?
慕丝7291255

TA贡献1859条经验 获得超6个赞

唯一的尊重是在第一个代码中


if(input.hasNext())

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

    while (input.hasNext()){

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

    }

}

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


“空间”第一第二第三


是从


first second third // 开头没有空格


查看完整回答
反对 回复 2022-07-14
?
汪汪一只猫

TA贡献1898条经验 获得超8个赞

问题是输出将以空格开头。您可以将空间放在最后,它会正常工作:


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

如果这仍然导致问题,也许这会起作用:


while(input.hasNext()){

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


    if(input.hasNext())

        System.out.print(" ");

}

我没有测试过它,但它应该在除最后一行之外的每一行附加一个空格。


查看完整回答
反对 回复 2022-07-14
?
拉莫斯之舞

TA贡献1820条经验 获得超10个赞

唯一明显的区别是正确答案不会产生以空格开头的输出。

使用此文件:

foo
bar
baz

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

 foo bar baz

答案的代码将有这个(“foo”前面没有空格):

foo bar baz


查看完整回答
反对 回复 2022-07-14
  • 4 回答
  • 0 关注
  • 84 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信