ArrayList中的Java ArrayOutOfBoundException

ArrayList中的Java ArrayOutOfBoundException,java,arrays,arraylist,Java,Arrays,Arraylist,问题是将整数数组中的簇定义为所有值相同的元素的最大序列。例如,在数组{3,3,3,4,4,3,2,2,2,4}中有5个簇,{3,3,3},{4,4},{3},{2,2,2,2}和{4}。阵列的群集压缩将使用群集中重复的编号替换每个群集。因此,前面数组的集群压缩将是{3,4,3,2,4}。第一个集群{3,3,3}被一个单独的3替换,依此类推 public static void main(String[] args) { int[] givenArray = {1, 1, 1, 1,

问题是将整数数组中的簇定义为所有值相同的元素的最大序列。例如,在数组
{3,3,3,4,4,3,2,2,2,4}
中有5个簇,
{3,3,3}
{4,4}
{3}
{2,2,2,2}
{4}
。阵列的群集压缩将使用群集中重复的编号替换每个群集。因此,前面数组的集群压缩将是
{3,4,3,2,4}
。第一个集群
{3,3,3}
被一个单独的3替换,依此类推

public static void  main(String[] args) {

    int[] givenArray = {1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1};
    System.out.println("Clustered Array = " + Arrays.toString(isTrivalent(givenArray)));
}

public static int[] isTrivalent  (int[] a){

    List<Integer> cluster = new ArrayList<Integer>();

    for (int i=0; i<a.length ; i++ ) {

        if(i == 0){
            cluster.add(a[i]);
        }else{
            if(cluster.get(i-1) != a[i]) cluster.add(a[i]);
        }
    }

    int[] arr = new int[cluster.size()];

    for (int j =0; j<cluster.size() ; j++) {
        arr[j] = cluster.get(j);
    }

    return arr;
}
publicstaticvoidmain(字符串[]args){
int[]givenArray={1,1,1,1,1,2,1,1,1,1,1,1};
System.out.println(“集群数组=“+Arrays.toString(isTrivalent(givenArray)));
}
公共静态int[]isTrivalent(int[]a){
List cluster=new ArrayList();

对于(int i=0;i这是因为当您检查

if(cluster.get(i-1) != a[i]) 
群集arraylist的大小实际上不必至少为
i-1
,因为您正在跳过许多数组元素。您需要将条件更改为

if(cluster.get(cluster.size()-1) != a[i])
或同等(如前一个答案中所建议)

使此代码按预期工作

public static void main(String[] args) {
    int[] givenArray = {1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1};
    System.out.println("Clustered Array = " + Arrays.toString(isTrivalent(givenArray)));
}

public static int[] isTrivalent(int[] a) {
    List<Integer> cluster = new ArrayList<Integer>();
    for (int i = 0; i < a.length; i++) {
        if (i == 0) {
            cluster.add(a[i]);
        } else {
            if (cluster.get(cluster.size() - 1) != a[i]) {
                cluster.add(a[i]);
            }
        }
    }
    int[] arr = new int[cluster.size()];
    for (int j = 0; j < cluster.size(); j++) {
        arr[j] = cluster.get(j);
    }
    return arr;
}
publicstaticvoidmain(字符串[]args){
int[]givenArray={1,1,1,1,1,2,1,1,1,1,1,1};
System.out.println(“集群数组=“+Arrays.toString(isTrivalent(givenArray)));
}
公共静态int[]isTrivalent(int[]a){
List cluster=new ArrayList();
for(int i=0;i
更改

if(cluster.get(i-1) != a[i]) cluster.add(a[i]);


cluster.get(i-1)
可能不存在。

在哪一行获得异常?如果(cluster.get(i-1)!=a[i])cluster.add(a[i]);

if(cluster.get(i-1) != a[i]) cluster.add(a[i]);
if(a[i-1] != a[i]) cluster.add(a[i]);