A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 凉宫蛋蛋 于 2012-7-23 01:09 编辑

  1. public class Triangle {
  2.     public static void main(String[] args) {
  3.         // TODO Auto-generated method stub
  4.         int row = 8;
  5.         int colunm = 8;
  6.         int f = 1;
  7.         int row2 = row / 2;
  8.         int colunm2 = colunm / 2;
  9.         // 1****************左上三角
  10.         System.out.println("--1左上三角--" + f++ + "---");
  11.         for (int i = 0; i < row; i++) {
  12.             for (int j = 0; j < colunm - i; j++) {
  13.                 System.out.print("*");
  14.             }
  15.             System.out.println("");
  16.         }

  17.         System.out.println("");
  18.         System.out.println("");

  19.         // 2****************左下三角
  20.         System.out.println("-2左下三角---" + f++ + "---");
  21.         for (int i = 0; i < row; i++) {
  22.             for (int j = 0; j < i; j++) {
  23.                 System.out.print("*");
  24.             }
  25.             System.out.println("");
  26.         }

  27.         System.out.println("");
  28.         System.out.println("");

  29.         // 3****************左下右上组合,把-符号改了就是右上了
  30.         System.out.println("-3左下右上组合---" + f++ + "---");
  31.         for (int i = 0; i < row; i++) {
  32.             // 换行的时候,每次做内层的时候j必须要清0
  33.             int head = 0;
  34.             // 外层循环只要循环他要循环的就可以了,用边界条件限制
  35.             // 因为是先做内层循环的事情的
  36.             for (int j = 0; j < colunm - i; j++) {
  37.                 while (head < i) {
  38.                     System.out.print("-");
  39.                     head++;
  40.                 }
  41.                 System.out.print("*");
  42.             }
  43.             System.out.println("");
  44.         }

  45.         System.out.println("");
  46.         System.out.println("");

  47.         // 4****************右下左上组合,把-符号改了就是右下了
  48.         System.out.println("-4右下左上组合---" + f++ + "---");
  49.         for (int i = 0, j = 0; i < row; i++) {
  50.             // 换行的时候,每次做内层的时候j必须要清0
  51.             j = 0;
  52.             for (int k = 0; k < colunm - j + 1; k++) {
  53.                 while (j < colunm - i) {
  54.                     System.out.print("-");
  55.                     j++;
  56.                 }
  57.                 System.out.print("*");
  58.             }
  59.             System.out.println("");
  60.         }
  61.         System.out.println("");
  62.         System.out.println("");
  63.     }

  64. }

复制代码
  1. public class Test8 {
  2.     public static void main(String[] args) {
  3.         // 自定义行列,行数必须大于等于列数,形状才符合
  4.         int row = 24;
  5.         int colunm = 24;
  6.         int row2 = row / 2;
  7.         int colunm2 = colunm / 2;

  8.         System.out.println("********************************************");
  9.         System.out.println("");
  10.         //***********上半部分左边右边大结合
  11.         for (int i = 0, jL = 0, k = 0, jR = 0, j = 0; i < row; i++) {

  12.             // 左边,上
  13.             // j_l左边起始的指针
  14.             // j总指针,从0到尽头16-1
  15.             // k遍历列
  16.             while (j < colunm2 - 1) {
  17.                 for (k = 0; k < colunm2 - jL + 1; k++) {
  18.                     while (jL < colunm2 - i) {
  19.                         System.out.print("1");
  20.                         jL++;
  21.                         j++;
  22.                     }
  23.                     // jL已经完成使命,不再使用
  24.                     j++;
  25.                     System.out.print("2");
  26.                 }

  27.             }

  28.             // 右边,下
  29.             // jR右边起始为0的指针
  30.             while (j >= colunm2 - 1 && j < colunm - 1) {
  31.                 for (k = 0; k < colunm - j + 2;) {
  32.                     while (jR < i + 1) {
  33.                         System.out.print("3");
  34.                         jR++;
  35.                         j++;
  36.                     }
  37.                     j++;
  38.                     System.out.print("4");
  39.                 }
  40.             }

  41.             // 每换一行,指针清零
  42.             jL = 0;
  43.             jR = 0;
  44.             j = 0;
  45.             System.out.println("");
  46.             
  47.             // i到达中间的时候
  48.             if (i > row2 - 2 && i < row - 1) {
  49.                 int row_D = row - row2;
  50.                 down(row_D, colunm2, colunm);
  51.                 break;
  52.             }
  53.         }

  54.     }
  55.     //下半部分左边右边大结合
  56.     private static void down(int row, int colunm2, int colunm) {

  57.         int b = 0;
  58.         for (int i = 0, jL = 0, k = 0, jR = 0, j = 0; i < row; i++) {
  59.         
  60.             // 当处于右下左边时
  61.             while (j < colunm2 - 1) {
  62.                 for (k = 0; k < colunm2 - i; k++) {
  63.                     while (jL < i + 1) {
  64.                         System.out.print("5");
  65.                         jL++;
  66.                         j++;
  67.                     }
  68.                     j++;
  69.                     System.out.print("6");

  70.                 }
  71.             }
  72.             
  73.             // 当处于右下右边时
  74.             while (j > colunm2 && j < colunm) {
  75.                 for (k = 0; k < colunm - jR - row + 1; k++) {
  76.                     while (jR < colunm2 - i) {
  77.                         System.out.print("7");
  78.                         j++;
  79.                         jR++;
  80.                     }
  81.                     j++;
  82.                     
  83.                     System.out.print("8");
  84.                 }               
  85.             }
  86.         
  87.             // 每换一行,指针清零
  88.             jL = 0;
  89.             jR = 0;
  90.             j = 0;

  91.             // 换行
  92.             System.out.println("");            
  93.         }
  94.     }

  95. }

复制代码
  1. public class Test2 {
  2.     public static void main(String[] args)  {
  3.         //自定义行列
  4.         int row = 7;
  5.         int colunm = 13;
  6.         int [][] a = new int [row][colunm];
  7.         for(int i = 0, j = 0; i < row;i++){
  8.             //如果大于最后一行-2,即到达最后一行-1,则按第2规律执行,否则按第1规律执行
  9.             if(i > row-3){
  10.                 for(j = i; j < colunm - i;j++){
  11.                     a[i][j] = 1;
  12.                 }
  13.                 continue;
  14.             }
  15.             
  16.             int head = 0;

  17.             //元素行与列位置相同,遍历列,遍历长度小于最右边元素长度
  18.             for(j = i; j < colunm - i;j++){
  19.                
  20.                 //当元素下标等于3,到达空白处;下标等于最右边元素位置-3,可以到达空白处
  21.                 if(head == 2 || head == (colunm - 1) -2*i -2){
  22.                     a[i][j] = 0;
  23.                 }else{
  24.                     a[i][j] = 1;
  25.                 }
  26.                 //前面下标++,换行时,重置为0
  27.                 head++;               
  28.             }        
  29.         }

  30.         //倒置输出上半部
  31.         for(int i = row - 1; i > 0; i--){
  32.             for(int j = 0; j < colunm; j++){
  33.                 if(a[i][j] == 1){
  34.                     System.out.print("*");
  35.                 }else if(a[i][j] == 0 ){
  36.                     System.out.print(" ");
  37.                 }
  38.             }
  39.             System.out.println();            
  40.         }
  41.         //输出下半部
  42.         for(int i = 0; i < row; i++){
  43.             for(int j = 0; j < colunm; j++){
  44.                 if(a[i][j] == 1){
  45.                     System.out.print("*");
  46.                 }else if(a[i][j] == 0 ){
  47.                     System.out.print(" ");
  48.                 }
  49.             }
  50.             System.out.println();            
  51.         }
  52.     }
  53. }

  54. //修改了一下代码,把图中end下标去除了,将head判断处改为head == (colunm - 1) -2*i -2
复制代码
真心花了不少时间,不过还是在摸索中懂了很多东西
for的联系到此为止了
其实上面的方法并不是很好,效率可能还行,但是我觉得二维数组做起来会更简单
当年在学校学C语言的时候,作业还是copy别人的,现在自己弄了一下其实也没太难,只是有些麻烦
有感兴趣的,可以拿去参考,欢迎拍砖



1.jpg (59.46 KB, 下载次数: 19)

1.jpg

1.jpg (59.55 KB, 下载次数: 15)

1.jpg

评分

参与人数 1技术分 +2 收起 理由
蒋映辉 + 2 赞一个!

查看全部评分

2 个回复

倒序浏览
很好啊,找到for循环的思想,循环套循环,大圈套小圈的思想,很好搞定
回复 使用道具 举报
{:soso_e179:}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马