上次我们举例说明了一维数组,这次我们看看二维数组。其实看了之后,会觉得二维数组就是一维数组的衍生,即一维数组中的每个元素里面又包含了一个一维数组,下面用图来更加深刻理解这句话的含义:
上图中i就像一个长度为4一维数组,每一个元素1~4又包含了一个长度为4的一维数组,最终就会生成一个4*5的二维数组。
这里举一个例子说明:
解题步骤
- 首先需要定义这个二维数组,并使用random将其元素随机置为1和0。
- 提示用户输入需要创建的数组大小,并将其二维数组显示出来
- 最后逐行逐列以及对角线和反对角线判断是否存在全部为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!");//注意每个判断的标杆
}
}
}