先把横列每个乘积算出(不含零)

然后是纵列

最后计算即是 横列*纵列/当前数/当前数

含零时只有当前数为0其他不为零才计算

import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        while (in.hasNextInt()) { // 注意 while 处理多个 case
            int leni = in.nextInt();
            int lenj = in.nextInt();
            int[][] arr = new int[leni][lenj];
            for (int i = 0; i < leni; i++) {
                for (int j = 0; j < lenj; j++) {
                    arr[i][j] = in.nextInt();
                }
            }
            int[][] proi = new int[leni][2];//横列乘积
            int[][] proj = new int[lenj][2];//纵列乘积
            for (int i = 0; i < leni; i++) {
                int num1 = 1, num2 = 0;
                for (int j = 0; j < lenj; j++) {
                    if (arr[i][j] != 0) {
                        num1 *= arr[i][j];//不为0则相乘
                    } else {
                        num2++;//为0计算0的个数
                    }
                }
                proi[i][0] = num1;
                proi[i][1] = num2;
            }
            for (int i = 0; i < lenj; i++) {//纵列
                int num1 = 1, num2 = 0;
                for (int j = 0; j < leni; j++) {
                    if (arr[j][i] != 0) {
                        num1 *= arr[j][i];//不为0则相乘
                    } else {
                        num2++;//为0计算0的个数
                    }
                }
                proj[i][0] = num1;
                proj[i][1] = num2;
            }
            int max = 0;
            for (int i = 0; i < leni; i++) {
                for (int j = 0; j < lenj; j++) {
                    if (proi[i][1] == 0 && proj[j][1] == 0){//没有0
                        max = Math.max(max, proi[i][0] * proj[j][0] / arr[i][j] / arr[i][j]);
                    }else if(proi[i][1] == 1 && arr[i][j] == 0 && proj[j][1] == 1){//有0且只有一个,这一个必须是当前数
                        max = Math.max(max, proi[i][0] * proj[j][0]);
                    }
                }
            }
            System.out.println(max);
        }
    }
}