2013-10-28 70 views
2

程序編譯返回一個數組,但它提供了以下錯誤:我有一個問題與方法

Two
One
Three
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 3
at testingN.printArray(testingN.java:19)
at 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]; 
    } 
} 
+4

'返回數據[i];'是使用索引3,因爲在循環退出之前''是遞增的。 – jonhopkins

+0

就像@jonhopkins所說的,如果你想返回數組的最後一個元素,你應該'返回數據[i-1];'。也就是說,打印的方法應該聲明爲「void」(不返回任何內容)。如果你想實現另一個功能,你應該在其他地方做... – alfasin

+0

你真的需要返回任何東西嗎?看起來你可以讓方法'void'並取出返回語句。 – jlars62

回答

2

這是因爲for循環的工作方式。

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

for循環的工作原理如下:

  1. 它首先運行在初始化部分的代碼。在你的情況下,它設置i = 0
  2. 它運行循環的內容
  3. 它執行操作。在你的情況下i++
  4. 它檢查布爾條件。如果是,則進入步驟2.否則退出循環。你的情況是i < data.length

由於步驟3發生在檢查條件之前,因此您的i值將比數組大小-1大1。也就是說,它的索引恰好比數組的最後一個索引大1。所以return data[i];給你一個越界異常。

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