在数组中右侧打印最大数字

时间:2018-02-17 03:03:17

标签: java arrays

我想要一个优化的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]);
        }
    }
}

即使我得到了正确的输出,它的抛出数组也会出现异常。 请指教。

2 个答案:

答案 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]);
        }
    }
}