【问题标题】:Unexpected output with array of Strings字符串数组的意外输出
【发布时间】:2015-03-25 16:06:29
【问题描述】:

我用下面的代码做了一个字符串数组

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);
    }
}

我期望收到的输出是:

“在 youtube 上观看:Mickey en de stomende drol”

但实际输出是

“在 youtube 上:Mickey en de stomende drol”

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

【问题讨论】:

  • 你开始 for 循环的索引值为 i = 1 而不是 i = 0

标签: java arrays for-loop output


【解决方案1】:

但实际输出是

[...]

与您发布的代码无关。您发布的代码无法编译,因为:

  • 您没有以分号结束字段初始化
  • 如果有,您将尝试访问 instance 字段而不创建实例
  • 修复该问题后,您会遇到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。)

【讨论】:

    【解决方案2】:

    错误如下:-

    1.由于您已经使用从 0 开始的参数初始化了 words 数组,因此您必须从 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);
     }
     }
    

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

        你的循环应该是这样的

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

        【讨论】:

          猜你喜欢
          • 2021-11-19
          • 1970-01-01
          • 1970-01-01
          • 2015-11-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-11-08
          • 2023-04-01
          相关资源
          最近更新 更多