package pack1;
import java.security.SecureRandom;
import java.util.ArrayList;
import java.util.Scanner;
public class MostRowAndColumn {
public static void main(String[] args) {
try(Scanner input = new Scanner(System.in);) {
System.out.print("Enter the array size n: ");
int[][] matrix = getRandomMatrix(input.nextInt());
System.out.println("The random array is ");
printMatrix(matrix);
System.out.println("The largest row index: " +
getMostRowIndex(matrix).toString().replaceAll("[\\[\\]]", ""));
System.out.println("The largest column index: " +
getMostColumnIndex(matrix).toString().replaceAll("[\\[\\]]", ""));
}
}
/**返回随机矩阵*/
public static int[][] getRandomMatrix(int n) {
int[][] matrix = new int[n][n];
for (int i = 0; i < matrix.length; i++)
for (int j = 0; j < matrix[i].length; j++)
matrix[i][j] = new SecureRandom().nextInt(2);
return matrix;
}
/**打印矩阵*/
public static void printMatrix(int[][] matrix) {
for (int i = 0; i < matrix.length; i++) {
for (int j = 0; j < matrix[i].length; j++)
System.out.print(matrix[i][j] + " ");
System.out.println();
}
}
/**返回最多1的行的数组列表*/
public static ArrayList<Integer> getMostRowIndex(int[][] matrix) {
if(matrix == null) return null; //如果空引用,返回null
ArrayList<Integer> row = new ArrayList<>(matrix.length);
for (int i = 0; i < matrix.length; i++)
row.add(0); //row初始matrix.length个0
for (int i = 0; i < matrix.length; i++)
for (int j = 0; j < matrix[i].length; j++)
row.set(i, row.get(i) + matrix[i][j]); //row.get(i)为第i行的和
int sum = row.get(0); //最多1的值
ArrayList<Integer> indexSet = new ArrayList<>(matrix.length); //下标集
for (int i = 1; i < row.size(); i++)
if (sum < row.get(i)) //获取最多1的值
sum = row.get(i);
for (int i = 0; i < row.size(); i++)
if(sum == row.get(i)) //获取下标
indexSet.add(i);
return indexSet;
}
/**返回最多1的列的数组列表*/
public static ArrayList<Integer> getMostColumnIndex(int[][] matrix) {
if(matrix == null) return null;
ArrayList<Integer> column = new ArrayList<>(matrix.length);
for (int i = 0; i < matrix.length; i++)
column.add(0);
for (int i = 0; i < matrix.length; i++)
for (int j = 0; j < matrix[i].length; j++)
column.set(i, column.get(i) + matrix[j][i]);
int sum = column.get(0);
ArrayList<Integer> indexSet = new ArrayList<>(matrix.length);
for (int i = 1; i < column.size(); i++)
if (sum < column.get(i))
sum = column.get(i);
for (int i = 0; i < column.size(); i++)
if(sum == column.get(i))
indexSet.add(i);
return indexSet;
}
}
package test;
import java.security.SecureRandom;
import java.util.ArrayList;
import java.util.List;
/**
* @create: 2023/3/25
* @Description:
* @FileName: Main
*/
public class Main {
public static void main(String[] args) {
int n = 4;
// 初始化矩阵
List<List<Integer>> matrix = initiate(n);
print(matrix);
List<List<Integer>> index = largestIndex(matrix);
System.out.println("The largest row index: " + index.get(0));
System.out.println("The largest column index: " + index.get(1));
}
/** 初始化矩阵 */
private static List<List<Integer>> initiate(int n) {
SecureRandom random = new SecureRandom(); // 随机类
List<List<Integer>> matrix = new ArrayList<>(n); // 矩阵
// 矩阵赋值
for (int i = 0; i < n; i++) {
matrix.add(new ArrayList<>(n));
for (int j = 0; j < n; j++) {
matrix.get(i).add(random.nextInt(2));
}
}
return matrix;
}
/** 获取最大行列下标 */
private static List<List<Integer>> largestIndex(List<List<Integer>> matrix) {
List<List<Integer>> temp = new ArrayList<>(); // 二维列表,0存储行下标,1存储列下标
temp.add(new ArrayList<>());
temp.add(new ArrayList<>());
int rowMax = 0, columnMax = 0; // 行列最大值
for (int i = 0; i < matrix.size(); i++) {
int rowCount = 0, columnCount = 0;
for (int j = 0; j < matrix.size(); j++) {
// 比较值(行[i, j],列[j, i])
if (1 == matrix.get(i).get(j)) ++rowCount;
if (1 == matrix.get(j).get(i)) ++columnCount;
}
// 当前数大于最大值时,赋值最大值,清空列表后添加当前值
if (rowCount > rowMax) {
rowMax = rowCount;
temp.get(0).clear();
temp.get(0).add(i);
} else if (rowCount == rowMax) {
temp.get(0).add(i);
}
if (columnCount > columnMax) {
columnMax = columnCount;
temp.get(1).clear();
temp.get(1).add(i);
} else if (columnCount == columnMax) {
temp.get(1).add(i);
}
}
return temp;
}
private static void print(List<List<Integer>> matrix) {
for (List<Integer> list : matrix) {
for (Integer integer : list) {
System.out.printf("%5d", integer);
}
System.out.println();
}
}
}