Java 如何过滤字符的矩阵以获得具有过滤结果的较小矩阵?

Java 如何过滤字符的矩阵以获得具有过滤结果的较小矩阵?,java,arrays,matrix,Java,Arrays,Matrix,给定矩阵a: [[C,c,c,c,a,a,b], [1,3,3,3,2,2,1]] 如果第一行有字符A-Z和A-Z,第二行有数字表示给定字母在矩阵中出现的次数,那么如何编写代码将矩阵A转换为矩阵B,其中B为: [[C,c,a,b], [1,3,2,1]] 在哪一行中,第一行不显示重复的字母,但在第二行中保留字母重复自身的原始时间 这就是我迄今为止所尝试的: for(i=0;i<matrixA.length;i++){ if(matrixA[0][0] == matrixA[0

给定矩阵a:

[[C,c,c,c,a,a,b],
 [1,3,3,3,2,2,1]]
如果第一行有字符A-Z和A-Z,第二行有数字表示给定字母在矩阵中出现的次数,那么如何编写代码将矩阵A转换为矩阵B,其中B为:

[[C,c,a,b],
 [1,3,2,1]]
在哪一行中,第一行不显示重复的字母,但在第二行中保留字母重复自身的原始时间

这就是我迄今为止所尝试的:

for(i=0;i<matrixA.length;i++){
   if(matrixA[0][0] == matrixA[0][1]){  
   matrixB[0][0] = matrixA[0][0]
   matrixB[1][0] = matrixA[1][0]
   }
}

for(i=0;i我意识到您不能简单地删除数组中的重复项,因为您的
matrixB
将是:

[[C, c, a, b],
 [1, 3, 2]] //final '1' removed as it is a "duplicate" of the first
因此,我建议采用这种方法:

Object[][] matrixA = {
    {'C','c','c','c','a','a','b'},
    {1,3,3,3,2,2,1}};
ArrayList<Object> rowHolder = new ArrayList<>();

for(int i = 0; i < matrixA.length; i++){ //for each row
    int j;
    for(j = 0; j < matrixA[i].length-1; j++){ //for each element
        if(matrixA[i][j] != matrixA[i][j+1]) //keep element if next element is different
            rowHolder.add(matrixA[i][j]);
    }
    rowHolder.add(matrixA[i][j]); //add last element always (next element doesn't exist)
    matrixA[i] = rowHolder.toArray(); //convert rowHolder to row
    rowHolder.clear(); //reset for next row
    System.out.println(Arrays.toString(matrixA[i]));
}


这里唯一的缺点是必须将
对象
用于矩阵和
数组列表
类型。这是因为有一个混合类型的2D数组,以及Java中在原语和对象之间转换的限制。您可以将
矩阵
类型设置为
int[]
rowHolder
具有通用参数
Integer
,如果您使用自定义转换器而不是。我意识到您不能简单地删除数组中的重复项,因为您的
矩阵xb
将是:

[[C, c, a, b],
 [1, 3, 2]] //final '1' removed as it is a "duplicate" of the first
因此,我建议采用这种方法:

Object[][] matrixA = {
    {'C','c','c','c','a','a','b'},
    {1,3,3,3,2,2,1}};
ArrayList<Object> rowHolder = new ArrayList<>();

for(int i = 0; i < matrixA.length; i++){ //for each row
    int j;
    for(j = 0; j < matrixA[i].length-1; j++){ //for each element
        if(matrixA[i][j] != matrixA[i][j+1]) //keep element if next element is different
            rowHolder.add(matrixA[i][j]);
    }
    rowHolder.add(matrixA[i][j]); //add last element always (next element doesn't exist)
    matrixA[i] = rowHolder.toArray(); //convert rowHolder to row
    rowHolder.clear(); //reset for next row
    System.out.println(Arrays.toString(matrixA[i]));
}

这里唯一的缺点是必须将
对象
用于矩阵和
数组列表
类型。这是因为有一个混合类型的2D数组,以及Java中在原语和对象之间转换的限制。您可以将
矩阵
类型设置为
int[]
rowHolder
具有通用参数
Integer
,如果您使用自定义转换器而不是