Java打印M图形(二维数组)——(九)

对于平面图形输出集合图形与数字组合的,用二维数组。先在Excel表格中分析一下,找到简单的规律。二维数组的行数为行高,列数为最后一个数大小。

对于减小再增大再减小再增大的,可以用一个boolean标志其是增加还是减小状态,减到最小时将其标志设为相反的并改变这时的初值大小。

效果:

 

Excel中分析

 

Java代码:

 1 package Java_Test;
 2 
 3 public class PrintM {
 4 
 5     /*
 6      
 7         3     7
 8        2  4  6  8
 9       1    5      9
10       平面图形(二维数组)
11       
12      */
13     public static void main(String[] args) {
14         
15         int atr[][]=new int[3][9];
16 //        产生9个数,放入对应位置
17         boolean flag=false;   //false代表横坐标在减小,true代表在增大
18 //        初始位置
19         int x=2;
20         int y=0;
21         for(int i=1;i<=9;i++){
22             
23 //            放入第一个数
24             atr[x][y]=i;
25 //            y始终在增大
26             y++;
27             
28             if(!flag){  //如果x在减小让其自减
29                 x--;
30             }
31             
32             if(flag){
33                 x++;
34             }
35 
36             if(x<0){  //x减到0,再减为-1
37                 flag=true;
38                 x=x+2;
39             }
40             
41             if(x>2){  //x加2,再加为3
42                 flag=false;
43                 x=x-2;
44             }
45         }
46         
47         
48         for(int i=0;i<3;i++){
49             for(int j =0;j<9;j++){
50                 if(atr[i][j]==0){
51                     System.out.print(" ");
52                 }else{
53                     System.out.print(atr[i][j]);
54                 }
55             }
56             System.out.println();
57         }
58         
59         
60         
61     }
62 }

 

测试:

 

 

-------------------------------------------------------输入n个数输出M的改造--------------------------------

 1 package Java_Test;
 2 
 3 import org.junit.Test;
 4 
 5 public class PrintM_duogeshu {
 6 
 7     /*
 8      * 
 9      * 3 7 2 4 6 8 1 5 9 平面图形(二维数组)
10      * 
11      */
12     public static void test1(int num) {
13 
14         int height = (num / 4) + 1; // 4条边
15 
16         int atr[][] = new int[height][num];
17         // 产生9个数,放入对应位置
18         boolean flag = false; // false代表横坐标在减小,true代表在增大
19         // 初始位置
20         int x = height-1;
21         int y = 0;
22         for (int i = 1; i <= num; i++) {
23 
24             // 放入第一个数
25             atr[x][y] = i;
26             // y始终在增大
27             y++;
28 
29             if (!flag) { // 如果x在减小让其自减
30                 x--;
31             }
32 
33             if (flag) {
34                 x++;
35             }
36 
37             if (x < 0) { // x减到0,再减为-1
38                 flag = true;
39                 x = x + 2;
40             }
41 
42             if (x > height-1) { // x加2,再加为3
43                 flag = false;
44                 x = x - 2;
45             }
46         }
47 
48         for (int i = 0; i < atr.length; i++) {
49             for (int j = 0; j < atr[i].length; j++) {
50                 if (atr[i][j] == 0) {
51                     System.out.print(" ");
52                 } else {
53                     System.out.print(atr[i][j]);
54                 }
55             }
56             System.out.println();
57         }
58 
59     }
60     
61     @Test
62     public void test(){
63         PrintM_duogeshu.test1(13);
64     }
65 }

 

测试:

 

posted @ 2017-08-02 22:30  QiaoZhi  阅读(1569)  评论(0编辑  收藏  举报