【问题标题】:The first line in Output [duplicate]输出中的第一行 [重复]
【发布时间】:2019-12-24 02:33:11
【问题描述】:

我正在尝试在一行中打印第一个字符,然后在下一行中打印前两个字符,等等。

我不明白开头有空行的原因以及最后一行没有完成单词的原因。通过将 for 循环更改为 (i=1 and i

public class Tester6 {
    public  static void main(String[] args) {
    Scanner input = new Scanner(System.in);
    String userInput = input.nextLine();
    int k = userInput.length();
    for(int i = 0; i < k; i++) {
        System.out.println(userInput.substring(0,i));
    }
  }
}

输入四的输出是,

f

呵呵

【问题讨论】:

  • 索引从 0 开始。第一次在循环中,它将打印空字符串,因为您正在打印从 0 到 0 的字符串(“from”和“to”都为零。)。在最后一次迭代中,您将没有最后一个字符,因为您将长度作为索引值。长度和索引两个不同的东西;但彼此相连。

标签: java


【解决方案1】:

因为子字符串 (0,0) 是 ""。正如String.substring(int, int) Javadoc 所说(部分)

子字符串从指定的beginIndex 开始并延伸到索引endIndex - 1 处的字符。

这就是为什么您在0 处得到一个带有i 的空行。以及为什么当i 位于最后一个字符时你没有得到最后一个字符。您可以将呼叫调整为 substring+ 1 类似

for (int i = 0; i < k; i++) {
    System.out.println(userInput.substring(0,i + 1));
}

【讨论】:

  • 所以substring(0, 0) 将从索引 0(零)开始并扩展到索引 -1(减一),不是吗?
  • 没有。因为它扩展endIndex - 1 - 这意味着它返回00 之间的字符。这是""
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-14
  • 1970-01-01
  • 1970-01-01
  • 2013-07-28
  • 1970-01-01
  • 2023-01-25
相关资源
最近更新 更多