首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >线程java.lang.ArrayIndexOutOfBoundsException: 5中的异常

线程java.lang.ArrayIndexOutOfBoundsException: 5中的异常
EN

Stack Overflow用户
提问于 2015-01-01 02:36:23
回答 3查看 309关注 0票数 3

我是一个新手,正在努力完成下面的教程

代码语言:javascript
复制
    // Create a method called countEvens
    // Return the number of even ints in the given array. 
    // Note: the % "mod" operator computes the remainder, e.g. 5 % 2 is 1. 
/*
 * SAMPLE OUTPUT:
 *  
 * 3
 * 0
 * 2
 *  
 */

下面是我的代码

代码语言:javascript
复制
public static void main(String[] args) {

        int a[] = {2, 1, 2, 3, 4};
         countEvens(a); // -> 3
         int b[] = {2, 2, 0};
         countEvens(b); // -> 3
         int c[] = { 1, 3, 5};
         countEvens(c); // -> 0

    }


    public static void countEvens(int[] x){
        int i = 1;
        int count = 0;
        while ( i <= x.length){
            if (x[i] % 2 == 0){
                count ++;
            }
            i ++;
        }
        System.out.println(count);
    }

代码可以运行,但我得到以下错误消息

代码语言:javascript
复制
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 5
    at apollo.exercises.ch05_conditionals.Ex5_CountEvens.countEvens(Ex5_CountEvens.java:23)
    at apollo.exercises.ch05_conditionals.Ex5_CountEvens.main(Ex5_CountEvens.java:10)

我能知道我做错了什么吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-01-01 02:37:59

while ( i <= x.length)中,一直循环到i等于x的长度为止。数组的最后一个索引总是长度- 1,因此将小于或等于(<=)更改为仅小于(<)。另外,将i初始化为0,因为Java数组是基于零的.

票数 1
EN

Stack Overflow用户

发布于 2015-01-01 02:42:43

线

代码语言:javascript
复制
while ( i <= x.length)

应该是

代码语言:javascript
复制
while ( i < x.length)

例如,如果length of x为5,则索引为0、1、2、3和4。索引从0增加到比数组长度少1。

然而,最简单的方法是使用for每个循环而不是while循环:

代码语言:javascript
复制
public static void countEvens(int[] x) {
    int count = 0;
    for (int number : x)
        if (number % 2 == 0)
            count++;
    System.out.println(count);
}
票数 3
EN

Stack Overflow用户

发布于 2015-01-01 02:45:52

Java (和大多数其他语言)中的数组是从0开始的索引。但是,数组的长度是数组中元素的计数。所以对于数组a[]

代码语言:javascript
复制
int a[] = {2,1,2,3,4};

指数上升到4,而长度是5。

由于<= (小于等于)运算符正在从1~5迭代数组,因此得到了一个超出界限的索引错误,但是数组的索引为0~4。

代码语言:javascript
复制
if (x[i-1] % 2 == 0) //iterates from 0~4 rather than 1~5

否则,可以设置迭代器int i = 0;,并使用小于<运算符来确保迭代器移动0~4。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27727924

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档