测试 table 的最大值时出错?

Error when testing for the max value of a table?

当我尝试 运行 将测试 table 的最大值的循环时出现错误。

table是tabl,长度为c

int a=0;
int b=0;
while (a<=c) {
    int d = tabl[a];
    int e = tabl[a+1];
    if(d < e)
        b = e;
    else
        b = d;
    a++;
}

很简单,从比较tabl[0]tabl[1]开始,把比较大的那个存下来,然后一直往下直到a = c,也就是[=27]的长度=] 然后完成循环保存 table 中的最大值 b.

但是当我 运行 这个时,我得到一个 java.lang.ArrayIndexOutOfBoundsException 错误代码,有人可以帮忙吗?谢谢!

a 等于 c

时,当您尝试达到 tabl[a+1] 时,您超出了数组的范围

你的整个算法并没有真正意义:你不必将当前索引的值与下一个索引的值进行比较来找出数组的最大值,而是将当前值与前一个最大值进行比较发现了。

查找数组最大值的常用方法是:

int max = table[0];
for(int i = 1; i < c; i++)
    if(table[i] > max)
        max = table[i];

这样,max 将包含数组的最大值(尽管如果 table 为空,代码将抛出异常)。

请更好地缩进代码,并使用更有意义的变量名(人们理解 max 胜于 b

当您在循环中到达 a = c - 1 时,您的代码正在查找 tabl[c-1]tabl[c] 的值。但是,由于您的 table 的长度为 c,这会导致 java.lang.ArrayIndexOutOfBoundsException。请注意,在 Java 中,数组是从 0 开始索引的,也就是说,第一个元素位于索引 0,最后一个元素位于索引 (length - 1)。

您可以使用 for-each 结构编写类似的内容:

int max = 0;
for (int element : tabl) {
    if (element > max) {
        max = element;
    }
}

或一个简单的 for 循环

int max = 0;
for (int i = 0; i < tabl.length; i++) {
    int element = tabl[i];
    if (element > max) {
        max = element;
    }
}

问题是您要越过数组末尾。数组是零索引的,因此 c 处的项目将是 IndexOutOfBounds。

另外因为你访问的是a+1,这意味着在a=c-2的循环中,a+1会访问数组的最后一个元素。

尝试:

int a=0;
int b=0;

while (a < c - 1){
    int d = tabl[a];
    int e = tabl[a+1];
    if(d<e) { b=e;} else { b=d; }
    a++; 
}

注意:更改是说 a < c - 1 而不是 a <= c 以确保在对数组进行索引时 a 永远不会 = c。