0

我刚刚阅读了我的 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)

我究竟做错了什么?

4

5 回答 5

4
String[] alphabet = new String[5];

上面的语句分配了一个容量为 5 的数组。有效的索引是 0、1、2、3 和 4。

索引 5 超出范围。因此:

  alphabet[5] = "e";

抛出异常。

于 2013-11-06T02:52:37.203 回答
1

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

于 2013-11-06T02:52:21.760 回答
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];
于 2013-11-06T07:25:58.830 回答
0

定义的数组长度为 5,并且alphabet[5] = "e";您正在尝试将第 6 个元素添加到数组中。定义长度为 6 的数组

String[] alphabet = new String[6];

或者删除最后一行代码

alphabet[5] = "e"
于 2013-11-06T02:55:24.783 回答
0

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

字母[5] = "e";. 这会导致“线程“主”java.lang.ArrayIndexOutOfBoundsException:5 中的异常

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

字符串[] 字母 = 新字符串 [6];

于 2013-11-06T02:55:50.507 回答