对于平面图形输出集合图形与数字组合的,用二维数组。先在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 910 平面图形(二维数组)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,再减为-137 flag=true;38 x=x+2;39 }40 41 if(x>2){ //x加2,再加为342 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,再减为-138 flag = true;39 x = x + 2;40 }41 42 if (x > height-1) { // x加2,再加为343 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 @Test62 public void test(){63 PrintM_duogeshu.test1(13);64 }65 }
测试: