我想要一个优化的java程序来打印数组右边的最高位。 例如:a [] = {3,6,7,2,4,1} 输出应为7,4,1。 我写了一个如下的程序
class Rightlargest{
public static void main(String args[]){
int a[]={1,3,2,4,5,2};
int c[]=new int[20];
for(int i=0;i<a.length;i++)
{
for(int j=i+1;j<a.length;j++)
{
if(a[i]<a[j]){
a[i]=a[j];
}
}
c[i]=a[i];
}
for(int i=0;i<c.length;i++)
{
if(c[i]!=c[i+1])
System.out.println(c[i]);
}
}
}
即使我得到了正确的输出,它的抛出数组也会出现异常。 请指教。
答案 0 :(得分:0)
当 i 等于 a.length-1 时, j 取值 a.length ,这是问题。
该数组的长度为5个元素。这意味着最后一个元素的索引为4
答案 1 :(得分:0)
修复:ArrayIndexOutOfBoundsException
我&lt; c.length -1
for (int i = 0; i < c.length -1; i++) { // c.length -1
if (c[i] != c[i + 1])
System.out.println(c[i]);
}
这不会超出数组索引超出范围。你的循环执行的索引比数组长度多1个。 当数组 length-> 20 和数组索引从0开始时, 你的循环正在迭代(0,1,2,3,4,5,6, 7,8,9,10,11,12,13,14,15,16,17,18,19,20) 将最后一个索引检查为21 数组边界。
修复工作代码:
public class RightLargest {
public static void main(String args[]) {
int a[] = { 1, 3, 2, 4, 5, 2 };
int c[] = new int[20];
for (int i = 0; i < a.length; i++) {
for (int j = i + 1; j < a.length; j++) {
if (a[i] < a[j]) {
a[i] = a[j];
}
}
c[i] = a[i];
}
for (int i = 0; i < c.length -1; i++) {
if (c[i] != c[i + 1])
System.out.println(c[i]);
}
}
}