Java.二维数组练习 制作n环"回"字型矩阵
感觉自己去发现探索一个规律还是很难的,找规律和实现总是碰壁,还好经过了多次修改,总算是实现了😊😊
代码:
package com.shujua;
/*
输入一个数字,输出该数值阶数的回字型矩阵
如:输入1,输出‘口’字型矩阵;输入2,输出‘回’字型矩阵,以此类推。
规律:环的四个边;横着的边i坐标相同且都是偶数,竖着的边j坐标相同都是偶数(i表示横坐标,j表示纵坐标)
空白处;横向,纵向,同上对应的都是奇数
对于y=4x-1阶数组来讲,环数为x;数组的下标范围是(0,y-1)
下标中的偶数(和0)有0,2,4---y-1;奇数为1,3---y-2
当下标为0或者最大值时,必是’*‘。
每多一环,就多两了个if语句;多出来的if语句相比于x-1环条件也多两个
*/
import java.util.Scanner;
public class ee {
public static void main(String[] args) {
System.out.println();
Scanner sc= new Scanner(System.in);
System.out.println("请输入环数");
int x=sc.nextInt();
int y=4*x-1;//x为环数,y为行数列数,y-1为最大下标值
char[][] hh=new char[y][y];
for(int i=0;i<y;i++){
for(int j=0;j<y;j++){ //这两个循环是遍历矩阵所有的点
boolean qq=true;
boolean ee=true;
boolean aa,bb;
for(int m=1;m<=x;m++) {
if(m!=1){//1是特例,不做处理
qq=qq&(j!=2*m-3)&(j!=y-2*m+2);//1 -2 3 -4
ee=ee&(i!=2*m-3)&(i!=y-2*m+2);
}
aa=((i==2*m-2)|(i==y-2*m+1));
bb=((j==2*m-2)|(j==y-2*m+1));
if(aa&qq){
hh[i][j]='*';
}
if(bb&ee){
hh[i][j]='*';
}
}
if(hh[i][j]!='*'){
hh[i][j]=' ';
}
/*
首先,对于n环,最大下标y-1
遍历n即可实现if条件1:
n=1 aa=i==0|i==y-1
n=2 aa=i==2|i==y-3
n aa=i==2(n-1)|i==y-2n+1
if条件2
n=2 qq=j!=1&j!=y-2 有一组
n=3 qq=j!=1&j!=y-2&j!=3&j!=y-4 有两组
n qq=qq&j!=2(n-1)-1&j!=y-2(n-1) 即qq=qq&(j!=2n-3)&(j!=y-2n+2)
if条件组合表示为:zz=(i==2(n-1)|i==y-2n-1)&qq&(j!=2n-3)&(j!=y-2n+2) qq初值为true
xx=(j==2(n-1)|j==y-2n-1)&ee&(i!=2n-3)&(i!=y-2n+2) ee初值为true
*/
//下面这个代码是仅控制3环以内的代码,用于发现规律
// if(i==0|j==0|i==(y-1)|j==(y-1)){
// hh[i][j]='*';
//
// }else if((i==2|i==y-3)&(j!=1&j!=y-2)){
// hh[i][j]='*';
//
// }else if((j==2|j==y-3)&(i!=1&i!=y-2)){
// hh[i][j]='*';
// }else if((i==4|i==y-5)&(j!=3&j!=y-4)&(j!=1&j!=y-2)){
// hh[i][j]='*';
//
// }else if((j==4|j==y-5)&(i!=3&i!=y-4)&(i!=1&i!=y-2)){
// hh[i][j]='*';
// }else if((j==6|j==y-7)&(i!=5&i!=y-6)&(i!=3)&(i!=y-4)&(i!=1&i!=y-2)){
// hh[i][j]='*';
// }else if((i==6|i==y-7)&(j!=5&j!=y-6)&(j!=3)&(j!=y-4)&(j!=1&j!=y-2)) {
// hh[i][j] = '*';
// }
// else {
// hh[i][j]=' ';
// }
}
}
for(int i=0;i<y;i++){
for(int j=0;j<y;j++){
System.out.print(hh[i][j]+" ");
}
System.out.println();
}
}
}
结果展示: