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

时间:2015-03-25 16:06:29

标签: 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);
    }
}

我期望收到的输出是:

  

&#34;在youtube上观看:Mickey en de stomende drol&#34;

但实际输出是

  

&#34;在youtube上:Mickey en de stomende drol&#34;

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

4 个答案:

答案 0 :(得分:7)

  

但实际输出是

[...]

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

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

此:

for(int i = 1 ; i <= words.length ; i++)

应该是:

for (int i = 0; i < words.length; i++)

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

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

(顺便说一句,像这样重复的字符串连接通常是一个坏主意。在你的情况下这不是问题,因为价值很少,但你应该了解StringBuilder。)< / p>

答案 1 :(得分:1)

循环上的索引必须以0 for int i=0; .....开头,因为java中的数组从位置0开始并以长度-1结束

答案 2 :(得分:1)

你的循环应该是这样的

for(int i=0; i<words.length; i++)

答案 3 :(得分:1)

错误如下: -

1.如果您已经使用从0开始的参数初始化了您的单词数组,那么您必须从0开始for循环。

2.您的问题中存在轻微错误,并且在我的问题中已经编辑过,将单词声明为静态和分号错误。

这是您的代码正常运行: -

 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 = 0 ; i <= words.length-1 ; i++)
 {
    output += " " + words[i];
 }

 System.out.println(output);
 }
 }