测试 2D 数组的每一行和每一列中是否存在元素 - java



我写了一个简短的程序,用0和1随机填充一个10x10 2D数组。我想检查数组以查看每行和每列是否包含五个以上的 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();
}

}

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));
}

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

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

您可以创建一个大小为max(n, m) * 2的"计数数组",其中nm是矩阵的维度,并用0s 初始化它。2表示它是列还是行的计数(例如,索引0表示列和1行(。然后,当您找到1时,递增该数组中的代表值(对于 cols 和行(。找到正确的索引只是一些模算术的问题。

相关内容

  • 没有找到相关文章

最新更新