【问题标题】:why is this array showing and error message(Eclipse)为什么这个数组显示和错误消息(Eclipse)
【发布时间】:2014-04-08 01:14:57
【问题描述】:
int[] myArray = new int[] {1,2,3,4,5,6,7,8,9,10};        

for(int number : myArray) {
    System.out.println(myArray[number]);
}

这是输出:

2
3
4
5
6
7
8
9
10

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 10
    at javaPractice.selfAssignArrays.main(selfAssignArrays.java:10)

这有什么问题?

【问题讨论】:

  • 您认为它的正确之处是什么? myArray[number] 是做什么的?每次迭代时number 的每个值是多少?数组的基索引是多少?

标签: java arrays eclipse error-handling


【解决方案1】:

你想这样做:

for (int number : myArray) {
    System.out.println(number);
}

这等价于:

for (int i=0; i<myArray.length; i++)  {
    int number = myArray[i];
    System.out.println(number);
}

【讨论】:

  • "" + 不是必需的; System.out.println(number); 会做同样的事情。
  • 是的,你是对的。在 setText() 是严格的字符串类型的情况下,Android 做了太多事情。我将编辑我的答案。
【解决方案2】:

因为增强的for 循环将number 设置为myArray 中的每个,而不是每个索引。 (请注意,要打印的第一个元素是 2,即索引 1 处的元素。)您增强的 for 循环或多或少等同于:

for (int i = 0; i < myArray.length; i++) {
    int number = myArray[i];
    System.out.println(myArray[number]);
}

你想要的是:

for (int number : myArray) {
    System.out.println(number);
}

【讨论】:

    【解决方案3】:

    对于每次迭代,您从数组中获取数字,并将该数字作为索引。这就是发生 ArrayIndexOutOfBoundsException 的原因。

    System.out.println(myArray[1]); System.out.println(myArray[2]); System.out.println(myArray[3]); System.out.println(myArray[4]); System.out.println(myArray[5]); System.out.println(myArray[6]); System.out.println(myArray[7]); System.out.println(myArray[8]); System.out.println(myArray[9]); System.out.println(myArray[10]);

    明白了吗? 您应该从System.out.println(myArray[0]); 开始并在System.out.println(myArray[9]); 结束 或者,只需将数字输出为System.out.println(number);

    【讨论】:

      猜你喜欢
      • 2021-03-04
      • 1970-01-01
      • 1970-01-01
      • 2012-12-30
      • 1970-01-01
      • 1970-01-01
      • 2017-01-04
      • 2013-04-02
      • 2013-09-14
      相关资源
      最近更新 更多