有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java在每次迭代后删除2d数组的列和行

在一个项目中,我需要计算给定分数的最大值。之后,应删除此特定行和相关列,以便在每行中仅获得一个最大值。所以我的结果应该是这样的:

结果

enter image description here

这就是我目前所拥有的

    float max = Float.MIN_VALUE;
    int remove_row = firstCluster.size()+1;
    int remove_column = firstCluster.size()+1;
    float[ ][ ] scores = new float[firstCluster.size()][secondCluster.size()];

    for(int i=0; i<scores.length; i++){
       if ( i == remove_row)
            continue;

        for(int j=0; j<scores[i].length; j++){
            if ( j == remove_column){
                continue;
            }
            else{
                System.out.print(scores[i][j]);
                if(scores[i][j] >= max)
                {
                    max = Math.max(max, scores[i][j]);
                    remove_row = i;
                    remove_column = j;
                    System.out.print("Max: "+max);
                }
            }
        }
        System.out.println("##############################");
    }

其思想是跳过前一个最大值的列和行,但如果您在3次迭代中,则只跳过前一次迭代的列和行,而不是所有前一次迭代的列和行。有没有更好的办法解决这个问题?我不需要使用必要的2d数组


共 (1) 个答案

  1. # 1 楼答案

    总结一下这些评论,得出一个正确的答案:

    不要在单元格中放零,而是保留两个集合-usedRowsusedColumns,它们跟踪已划掉的行和列,并在if(scores[i][j] >= max)之前使用额外的if语句发送这些行和列

    记住在每次迭代开始时重置max:

    max = Float.MIN_VALUE