无法理解数组错误

时间:2013-11-06 02:49:41

标签: java arrays

我刚刚阅读了我的AP Java书中的数组介绍部分并尝试了以下示例,但是我收到错误并且无法理解原因。

代码:

public static void arrayT(int i){
  String[] alphabet = new String[5];
  alphabet[0] = "a";
  alphabet[1] = "c";
  alphabet[2] = "x";
  alphabet[3] = "b";
  alphabet[4] = "d";
  alphabet[5] = "e";
  System.out.println(alphabet[i]);
}

主要:

public static void main(String [] args){
  arrayT(2);
}

输出:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 5
at Main.arrayT(Main.java:18)
at Main.main(Main.java:36)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120)

我做错了什么?

5 个答案:

答案 0 :(得分:4)

String[] alphabet = new String[5];

以上语句分配容量为5的数组。有效索引为0,1,2,3和4.

索引5超出范围。因此:

  alphabet[5] = "e";

抛出异常。

答案 1 :(得分:1)

String[] alphabet = new String[5];创建一个长度为5的数组,即它包含索引0,1,2,3,4以及其中的五个元素。您正尝试在索引5下访问不存在的元素。

答案 2 :(得分:0)

定义的数组长度为5,使用alphabet[5] = "e";时,您尝试将第6个元素添加到数组中。使用legnth定义数组为6

String[] alphabet = new String[6];

或删除最后一行代码

alphabet[5] = "e"

答案 3 :(得分:0)

这是因为您声明数组的长度为5,但您为其分配了6个值。

alphabet [5] =“e”;。这个导致'线程中的异常“主”java.lang.ArrayIndexOutOfBoundsException:5'

尝试设置长度为6的数组长度。然后您将得到正确的结果。

String [] alphabet = new String [6];

答案 4 :(得分:0)

public static void arrayT(int i){
  String[] alphabet = new String[5];
  alphabet[0] = "a";
  alphabet[1] = "c";
  alphabet[2] = "x";
  alphabet[3] = "b";
  alphabet[4] = "d";
  alphabet[5] = "e";
  System.out.println(alphabet[i]);
}
当你声明语句

 String[] alphabet = new String[5];

那么你的字符串数组大小是5,即0-4(包括0然后总共可以添加5个元素)

所以你必须将String数组的大小增加到6,以便添加6个元素

 String[] alphabet = new String[6];