Java_脱产篇_数组2

上次我们举例说明了一维数组,这次我们看看二维数组。其实看了之后,会觉得二维数组就是一维数组的衍生,即一维数组中的每个元素里面又包含了一个一维数组,下面用图来更加深刻理解这句话的含义:
在这里插入图片描述
上图中i就像一个长度为4一维数组,每一个元素1~4又包含了一个长度为4的一维数组,最终就会生成一个4*5的二维数组。
这里举一个例子说明:
在这里插入图片描述

解题步骤

  1. 首先需要定义这个二维数组,并使用random将其元素随机置为1和0。
  2. 提示用户输入需要创建的数组大小,并将其二维数组显示出来
  3. 最后逐行逐列以及对角线和反对角线判断是否存在全部为1或0。判断的基本思想是:确定一个标杆,比如,判断每一行时,就要确定每一行的第一个元素为标杆,依次和后面的进行比较,再往后遍历过程中,一旦出现与“标杆”不同,则停止此次遍历,开启下一轮遍历。

代码

import java.util.*;
class Class36{
    /**
    问题:提示用户输入一个整数n,然后电脑随机产生一个n*n的矩阵(只有0或1),最后输出行,列和对角线全是0或1的对应角标
     */
    public static void main(String[] args){
        Scanner scanner=new Scanner(System.in);
        System.out.print("请输入矩阵的大小:");
        int size=scanner.nextInt();
        int[][] mantrix=new int[size][size];
        for(int i=0;i<mantrix.length;i++){//给矩阵中赋值
            for(int j=0;j<mantrix[i].length;j++){
                mantrix[i][j]=Math.random()>0.5?1:0;
            }
        }
        for(int i=0;i<mantrix.length;i++){//打印随机产生的矩阵
            for(int j=0;j<mantrix[i].length;j++){
                System.out.print(mantrix[i][j]);
            }
            System.out.println();
        }
        //判断行
        for(int i=0;i<mantrix.length;i++){
            boolean flag=true;
            for(int j=1;j<mantrix[i].length;j++){
                if(mantrix[i][0]!=mantrix[i][j]){
                    flag=false;
                    break;
                }
            }
            if(flag){
                System.out.print("All "+mantrix[i][0]+" is in the row "+i);
            }
        }
        //判断列
        for(int i=0;i<mantrix.length;i++){
            boolean flag=true;
            for(int j=1;j<mantrix[i].length;j++){
                if(mantrix[0][i]!=mantrix[j][i]){
                    flag=false;
                    break;
                }
            }
            if(flag){
                System.out.print("All "+mantrix[0][i]+" is in the colum "+i);
            }
        }
        //判断正对角线
        boolean flag=true;
        for(int i=1;i<mantrix.length;i++){
            if(mantrix[0][0]!=mantrix[i][i]){
                flag=false;
                break;
            }
        }
        if(flag){
            System.out.print("All "+mantrix[0][0]+"is on the major diagonal!");
        }
        //判断反对角线
        flag=true;
        for(int i=0;i<mantrix.length;i++){
            if(mantrix[mantrix.length-1][0]!=mantrix[mantrix.length-2-i][i+1]){
                flag=false;
                break;
            }
        }
        if(flag){
            System.out.print("All "+mantrix[mantrix.length-1][0]+" on the sub-diagonal!");//注意每个判断的标杆
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值