为了账号安全,请及时绑定邮箱和手机立即绑定

测试二维数组的每一行和每一列中元素的存在 - java

测试二维数组的每一行和每一列中元素的存在 - java

GCT1015 2021-12-01 16:02:51
我编写了一个简短的程序,它随机填充一个 10x10 的 2D 数组,其中包含 0 和 1。我想检查数组以查看每行和每列是否包含超过五个 1。我已经使用 2 个单独的嵌套 for 循环完成了它,但是有没有办法只使用 1 个嵌套的 for 循环检查每一行和列并打印出每行/列的结果?我无法找到一种将我拥有的内容组合到一个嵌套循环中的方法。非常感谢您的任何建议:)这是我的代码:public class Main {public static void main(String[] args) {    int[][] array = new int[10][10];    for (int i = 0; i < array.length; i++) {        for (int j = 0; j < array.length; j++) {            array[i][j] = (int) (2 * Math.random());        }    }    System.out.print("---THE MATRIX---\n");    System.out.println();    for (int[] arr : array) {        for (int value : arr) {            System.out.print(value + " ");        }        System.out.println();    }    System.out.println();    fiveOnes(array);}private static void fiveOnes(int[][] array) {    System.out.println("---MORE THAN FIVE ONES THROUGHOUT THE MATRIX---\n");    for (int i = 0; i < array.length; i++) {        int oneCount = 0;        boolean flag = false;        for (int j = 0; j < array.length; j++) {            if (array[i][j] == 1) {                oneCount++;            }        }        if (oneCount > 5)            flag = true;        System.out.println("Row " + (i + 1) + ": " + flag);    }    System.out.println();    for (int i = 0; i < array[0].length; i++) {        int oneCount = 0;        boolean flag = false;        for (int j = 0; j < array.length; j++) {            if (array[j][i] == 1) {                oneCount++;            }        }        if (oneCount > 5) {            flag = true;        }        System.out.println("Column " + (i + 1) + ": " + flag);    }    System.out.println();}}
查看完整描述

3 回答

?
莫回无

TA贡献1865条经验 获得超7个赞

for (int i = 0; i < 10; i++) {

    int oneCountRow = 0;

    int oneCountColumn = 0;

    for (int j = 0; j < 10; j++) {

        if (array[i][j] == 1) {

            oneCountRow++;

        }

        if (array[j][i] == 1) {

            oneCountColumn++;

        }

    }


    System.out.println("Row " + (i + 1) + ": " + (oneCountRow > 5));

    System.out.println("Column " + (i + 1) + ": " + (oneCountColumn> 5));

}

或免费尺寸:


    int maxLenght = 0;

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

        maxLenght = Math.max(maxLenght, array[i].length);

    }

    maxLenght = Math.max(maxLenght, array.length);

    for (int i = 0; i < maxLenght; i++) {

        int oneCountRow = 0;

        int oneCountColumn = 0;

        for (int j = 0; j < maxLenght; j++) {

            if (j < array[i].length && i < array.length && array[i][j] == 1) {

                oneCountRow++;

            }

            if (i < array[j].length && j < array.length && array[j][i] == 1) {

                oneCountColumn++;

        }


        System.out.println("Row " + (i + 1) + ": " + (oneCountRow > 5));

        System.out.println("Column " + (i + 1) + ": " + (oneCountColumn> 5));

}


查看完整回答
反对 回复 2021-12-01
?
HUH函数

TA贡献1836条经验 获得超4个赞

以下是我对解决方案的看法:

您可以创建一个大小为“计数数组”的“计数数组”,max(n, m) * 2其中nm是矩阵的维度,并使用0s对其进行初始化。该2代表它的数列或行是否(如指数0代表列和1行)。然后,当您找到 a 1(对于列和行)时,增加该数组中的代表值。找到正确的索引只是一些模块化算法的问题。


查看完整回答
反对 回复 2021-12-01
?
慕容森

TA贡献1853条经验 获得超18个赞

您可以尝试在两个平面数组中收集布尔值。一种用于列,一种用于行。然后您只需要一个嵌套循环并为这两个平面数组使用适当的索引。


查看完整回答
反对 回复 2021-12-01
  • 3 回答
  • 0 关注
  • 162 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信