我写了一个简短的程序,用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();
}
}
答案 0 :(得分:4)
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));
}
答案 1 :(得分:0)
您可以尝试将布尔值收集为两个平面数组。一个用于列,一个用于行。然后,您只需要一个嵌套循环,并为这两个平面数组使用适当的索引即可。
答案 2 :(得分:0)
这是我对解决方案的看法:
您可以创建大小为max(n, m) * 2
的“计数数组”,其中n
和m
是矩阵的维度,并用0
s进行初始化。 2
代表是对列还是行进行计数(例如,索引0
代表列和1
行)。然后,当您找到1
(针对列和行)时,您将在该数组中增加代表值。找到正确的索引只是一些模块化算法的问题。