Java、最大的行和列


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

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值