带有字符串数组的意外输出

Jon*_*ert 0 java arrays for-loop output

我使用以下代码创建了一个字符串数组

public class Main 
{
    static String[] words = {"watch", "on", "youtube",":","Mickey","en","de","stomende","drol"};
    public static void main(String[] args)
    {
        String output = "";
        for(int i = 1 ; i <= words.length ; i++)
        {
            output += " " + words[i];
        }

        System.out.println(output);
    }
}
Run Code Online (Sandbox Code Playgroud)

我期望收到的输出是:

"在youtube上观看:Mickey en de stomende drol"

但实际产量是

"在youtube上:Mickey en de stomende drol"

我想我犯了一个小错误,它是怎么来的?

Jon*_*eet 7

但实际产量是

[...]

不是您发布的代码.您发布的代码无法编译,因为:

  • 您没有用分号结束字段初始化
  • 如果有,您将尝试访问实例字段而不创建实例
  • 在确定之后,你会遇到ArrayIndexOutOfBoundsException与你错过第一个元素基本相同的原因 - 见下文.

这个:

for(int i = 1 ; i <= words.length ; i++)
Run Code Online (Sandbox Code Playgroud)

应该:

for (int i = 0; i < words.length; i++)
Run Code Online (Sandbox Code Playgroud)

请注意,起始索引循环条件都已更改.后者是表达从0(包括)到独占上限的循环的惯用方式.

Java中的数组是基于0的 - 例如,长度为4的数组具有0,1,2和3的有效索引.有关更多详细信息,请参阅Java数组教程.

(顺便说一句,像这样重复的字符串连接通常是一个坏主意.在你的情况下,这不是问题,因为价值太少,但你应该学习StringBuilder.)