我刚刚阅读了我的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)
我做错了什么?
答案 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];