我有一个从方法返回数组的问题

时间:2013-10-28 18:26:15

标签: java arrays methods

程序编译但出现以下错误:

  

两个
  一个
  三个
  线程“main”中的异常java.lang.ArrayIndexOutOfBoundsException:3
  在testingN.printArray(testingN.java:19)
  在testingN.main(testingN.java:10)

我真的是Java(和编程)的新手,我坚持这个。

public class testingN 
{
    public static void main(String[] args) 
    {
        String[] names = new String[3];
        names[0] = "Two";
        names[1] = "One";
        names[2] = "Three";
        printArray(names);
    }
    public static String printArray(String[] data) 
    {
        int i;
        for (i = 0; i < data.length; i++) 
        {
          System.out.println(data[i]);
        }
        return data[i];
    }
}

2 个答案:

答案 0 :(得分:2)

这是因为for循环的工作方式。

for (*initialization*; *some boolean condition*; *action to perform each loop*) {
    //...
}

for循环的工作原理如下:

  1. 首先在初始化部分运行代码。在您的情况下,它设置i = 0
  2. 它运行循环的内容
  3. 执行操作。在您的情况下i++
  4. 检查布尔条件。如果是,则转到步骤2.否则它退出循环。在您的情况下,条件为i < data.length
  5. 由于步骤3在检查条件之前发生,因此i值将比数组大小-1大1。也就是说,它的索引恰好比数组的最后一个索引大一个。所以return data[i];会给你一个越界异常。

答案 1 :(得分:0)

public class testingN 
{
    public static void main(String[] args) 
    {
        String[] names = new String[3];
        names[0] = "Two";
        names[1] = "One";
        names[2] = "Three";
        printArray(names);
    }
    public static void printArray(String[] data) 
    {
        for (int i = 0; i < data.length; i++) 
        {
          System.out.println(data[i]);
        }
    }
}