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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

再来一个会转弯的:
  1. package cn.itheima;

  2. public class DrawTheArr {

  3.         /**写一方法,打印等长的二维数组,要求从1开始的自然数由方阵的最外圈向内螺旋方式地顺序排列。 如: n = 4 则打印:     
  4.          * 本实例成功完成!
  5.          * @author 冰深
  6.          */
  7.         public static void main(String[] args) {
  8.                 int div=6;
  9.                 int arr[][]=new int[div][div];
  10.                 //定义方向right 1,down 2, left 3, up 4
  11.                 draw(arr,div);
  12.                 printMap(arr,div);
  13.         }

  14.         private static void draw(int[][] arr, int div){
  15.                 int dir=1;
  16.                 int i=0,j=0;
  17.                 for(int t=0;t<div*div;t++){
  18.                         //给当前元素赋值
  19.                         arr[i][j]=t+1;
  20.                         System.out.println("------------\r\n元素值arr["+i+"]["+j+"]="+arr[i][j]+";方向:"+dir);
  21.                         //判断下个元素是否可用,如果不可用,那么就转向:元素角标越界或者下一个元素不为空
  22.                         boolean out=nextX(dir,j)>=div || nextX(dir,j)<0 || nextY(dir,i)>=div || nextY(dir,i)<0;
  23.                         if(out || arr[nextY(dir,i)][nextX(dir,j)]!=0){
  24.                                
  25.                                 if(!out)
  26.                                         System.out.println("拐弯原因是:arr["+nextX(dir,j)+"]["+nextY(dir,i)+"]"+arr[nextX(dir,j)][nextY(dir,i)]);
  27.                                 System.out.println("~~~~拐弯,转向了~!"+out);
  28.                                 dir=nextDir(dir);
  29.                         }
  30.                        
  31.                         //获取下一次的坐标
  32.                         j=nextX(dir, j);
  33.                         i=nextY(dir, i);
  34.                         System.out.print("下一个坐标arr["+i+"]["+j+"]\r\n------------\r\n");
  35.                 }
  36.                
  37.         }
  38.        
  39.        


  40.         //获取下一个方向
  41.         private static int nextDir(int dir) {
  42.                 switch (dir) {
  43.                 case 1:
  44.                         dir=2;
  45.                         break;
  46.                 case 2:
  47.                         dir=3;
  48.                         break;
  49.                 case 3:
  50.                         dir=4;
  51.                         break;
  52.                 case 4:
  53.                         dir=1;
  54.                         break;

  55.                 default:
  56.                         break;
  57.                 }
  58.                 return dir;
  59.         }

  60.         //获取下一个x坐标
  61.         private static int nextX(int dir, int x) {
  62.                 switch (dir) {
  63.                 case 1:
  64.                         x++;
  65.                         break;
  66.                 case 3:
  67.                         x--;
  68.                         break;
  69.                
  70.                 default:
  71.                         break;
  72.                 }
  73.                 return x;
  74.         }
  75.        
  76.         //获取下一个Y坐标
  77.         private static int nextY(int dir,int y) {
  78.                 switch (dir) {
  79.                
  80.                 case 2:
  81.                         y++;
  82.                         break;
  83.                
  84.                 case 4:
  85.                         y--;
  86.                         break;

  87.                 default:
  88.                         break;
  89.                 }
  90.                 return y;
  91.         }

  92.         //打印数组
  93.         private static void printMap(int[][] arr, int div) {
  94.                 for(int i=0;i<div;i++){
  95.                         for(int j=0;j<div;j++){
  96.                                 System.out.print(arr[i][j]+"\t");
  97.                         }
  98.                         System.out.println();
  99.                 }
  100.         }

  101. }
复制代码
效果如下:

1        2        3        4        5        6       
20        21        22        23        24        7       
19        32        33        34        25        8       
18        31        36        35        26        9       
17        30        29        28        27        10       
16        15        14        13        12        11       

评分

参与人数 1技术分 +1 收起 理由
奋斗的青春 + 1 赞一个!

查看全部评分

回复 使用道具 举报
  1. public class PrintTriangle {
  2.    
  3.     public static void main(String[] args) {
  4.         System.out.println("======左边正三角形======");
  5.         printTopLeft(5);
  6.         System.out.println("======左边倒三角形======");
  7.         printDownLeft(5);
  8.         System.out.println("======打印右正三角形======");
  9.         printTopRight(5);
  10.         System.out.println("======打印右倒三角形======");
  11.         printDownRight(5);
  12.         System.out.println("======打印正中三角形======");
  13.         printTopCenter(5);
  14.         System.out.println("======打印倒中三角形======");
  15.         printDownCenter(5);
  16.         System.out.println("======打印中正空三角形======");
  17.         printTopMidBlank(5);
  18.         System.out.println("======打印中倒空三角形======");
  19.         printDownMidBlank(5);
  20.         System.out.println("======打印正人字状======");
  21.         printTopRen(5);

  22.     }
  23.     /**//*
  24.      * 打印正人字状
  25.      */
  26.     public static void printTopRen(int n){
  27.         for(int i = 1; i <= n; i ++){
  28.             for(int j = i; j < n; j ++){
  29.                 System.out.print("   ");
  30.             }
  31.             //左半部分
  32.             for(int j = 1; j <= i; j++){
  33.                 if(j == 1)
  34.                     System.out.print(" * ");
  35.                 else
  36.                     System.out.print("   ");
  37.             }
  38.             //右半部分
  39.             for(int j = 1; j < i; j++){
  40.                 if(j == i - 1)
  41.                     System.out.print(" * ");
  42.                 else
  43.                     System.out.print("   ");
  44.             }
  45.             System.out.println();
  46.         }
  47.     }
  48.     /**//*
  49.      * 打印倒空三角形
  50.      */
  51.     public static void printDownMidBlank(int n){
  52.         for(int i = 1; i <= n; i ++){
  53.             for(int j = 1; j < i; j ++){
  54.                 System.out.print("   ");
  55.             }
  56.             for(int j = i; j <= n; j ++){
  57.                 if(i == 1 || j == i|| i == n)
  58.                     System.out.print(" * ");
  59.                 else
  60.                     System.out.print("   ");
  61.             }
  62.             for(int j = i; j < n; j ++){
  63.                 if(i == 1 || j == n - 1)
  64.                     System.out.print(" * ");
  65.                 else
  66.                     System.out.print("   ");
  67.             }
  68.             System.out.println();
  69.         }
  70.     }
  71.     /**//*
  72.      * 打印中正空三角形
  73.      */
  74.     public static void printTopMidBlank(int n){
  75.         for(int i = 1; i <= n; i ++){
  76.             for(int j = i; j < n; j ++){
  77.                 System.out.print("   ");
  78.             }
  79.             //左半部分
  80.             for(int j = 1; j <= i; j++){
  81.                 if(j == 1 || i == n)
  82.                     System.out.print(" * ");
  83.                 else
  84.                     System.out.print("   ");
  85.             }
  86.             //右半部分
  87.             for(int j = 1; j < i; j++){
  88.                 if(j == i - 1 || i == n)
  89.                     System.out.print(" * ");
  90.                 else
  91.                     System.out.print("   ");
  92.             }
  93.             System.out.println();
  94.         }
  95.     }
  96.     /**//*
  97.      * 打印倒中三角形
  98.      */
  99.     public static void printDownCenter(int n){
  100.         for(int i = 1; i <= n; i ++){
  101.             for(int j = 1; j < i; j ++){
  102.                 System.out.print("   ");
  103.             }
  104.             for(int j = i; j <= n; j ++){
  105.                 System.out.print(" * ");
  106.             }
  107.             for(int j = i; j < n; j ++){
  108.                 System.out.print(" * ");
  109.             }
  110.             System.out.println();
  111.         }
  112.     }
  113.     /**//*
  114.      * 打印正中三角形
  115.      */
  116.     public static void printTopCenter(int n){
  117.         for(int i = 1; i <= n; i ++){
  118.             for(int j = i; j < n; j ++){
  119.                 System.out.print("   ");
  120.             }
  121.             //左半部分
  122.             for(int j = 1; j <= i; j++){
  123.                 System.out.print(" * ");
  124.             }
  125.             //右半部分
  126.             for(int j = 1; j < i; j++){
  127.                 System.out.print(" * ");
  128.             }
  129.             System.out.println();
  130.         }
  131.     }
  132.     /**//*
  133.      * 打印右倒三角形
  134.      */
  135.     public static void printDownRight(int n){
  136.         for(int i = n; i >= 1; i --){
  137.             for(int j = n; j > i; j --){
  138.                 System.out.print("   ");
  139.             }
  140.             for(int j = i; j >= 1; j --){
  141.                 System.out.print(" * ");
  142.             }
  143.             System.out.println();
  144.         }
  145.     }
  146.     /**//*
  147.      * 打印右正三角形
  148.      */
  149.     public static void printTopRight(int n){
  150.         for(int i = 1; i <= n; i ++){
  151.             for(int j = n; j > i; j --){
  152.                 System.out.print("   ");
  153.             }
  154.             for(int j = i; j >= 1; j--){
  155.                 System.out.print(" * ");
  156.             }
  157.             System.out.println();
  158.         }
  159.     }
  160.     /**//*
  161.      * 打印左正三角型
  162.      */
  163.     public static void printTopLeft(int n){
  164.         for(int i = 1; i <= n; i ++){
  165.             for(int j = 1; j <= i; j ++){
  166.                 System.out.print(" * ");
  167.             }
  168.             System.out.println();
  169.         }
  170.     }
  171.     /**//*
  172.      * 打印左倒三角形
  173.      */
  174.     public static void printDownLeft(int n){
  175.         for(int i = 1; i <= n; i ++){
  176.             for(int j = n; j >= i; j --){
  177.                 System.out.print(" * ");
  178.             }
  179.             System.out.println();
  180.         }
  181.     }
  182. }
复制代码

无标题.gif (20.54 KB, 下载次数: 136)

无标题.gif

评分

参与人数 1技术分 +1 收起 理由
奋斗的青春 + 1 赞一个!

查看全部评分

回复 使用道具 举报 1 0
        圆形的

public static void main(String[] args) {
                  int r = 25;
                  for (int y = 0; y <= 2 * r; y += 2) {
                   long x = Math.round(r - Math.sqrt(2 * r * y - y * y));
                   long longLength = 2 * (r - x);

                   for (int i = 0; i <= x; i++) {
                    System.out.print(" ");
                   }
                   System.out.print("*");

                   for (int j = 0; j <= longLength; j++) {
                    System.out.print(" ");
                   }
                   System.out.println("*");
                  }
                 }


回复 使用道具 举报
package training;

public class BendLine {
       
    static char[][] ch=new char[20][20];
    static int length=ch.length-1;
    public static void main(String[] args)
    {
            int x,y;        
            for(x=0;x<length+1;x++)//初始化字符数组
                    for(y=0;y<length+1;y++)
                    ch[x][y]=' ';
            x=y=length;
            int count=0;
            while(count<(length+1)/2)
            {
                    if(count%2==1)
                    area(x,y,'*');
                    else
                    area(x,y,' ');
                    
                    x--;
                    y--;
                    count++;
                    
            }
           
            for(x=0;x<length+1;x++)
            {
                    System.out.print(ch[x]);
                    System.out.println("");
            }
           
    }
    static void area(int x,int y,char c)
    {        
            int i=length-x;
            int j=length-y;
            int n=0;
            int k=1;
            while(n<4)
            {        
                    if(n==0 && i<x)//n==0指左边
                            ch[i++][j]=c;
                    else if(n==0)
                    {n++;i=x;}

                    if(n==1 && j<y)//n==1指下边
                            ch[i][j++]=c;
                    else if(n==1)
                    {n++;j=y;}

                    if(n==2 && i>length-x)//n==2指右边
                            ch[i--][j]=c;
                    else if(n==2)
                    {n++;j=x;}
                    if(n==3 && j>length-x)//n==3指上边
                            ch[i][j--]=c;
                    else if(n==3)
                    {n++;}

            }//while
            if(ch[length-x+1][y]=='*')
                    ch[length-x+1][y]=' ';
            else
                    ch[length-x+1][y]='*';                        
    }

}


很靠谱的   图像是个回
*******************
*                  
* ****************
* *              *
* * ************ *
* * *          * *
* * * ******** * *
* * * *      * * *
* * * * **** * * *
* * * * *  * * * *
* * * *    * * * *
* * * ****** * * *
* * *        * * *
* * ********** * *
* *            * *
* ************** *
*                *
******************
                    
回复 使用道具 举报
哈哈,超搞笑的一个心形


     **        **
    *  *      *  *
   *    *    *    *
  *      *  *      *
*        **        *
*                    *
*                    *
*                    *
*                  *
  *                *
   *              *
    *            *
     *          *
      *        *
       *      *
        *    *
         *  *
          *
  1. public class Test2 {
  2.         private static String str = " ";
  3.         private static String str1 = "*";

  4.         /**
  5.          * 又*号打印出一个心形
  6.          */
  7.         public static void main(String[] args) {
  8.                 method();
  9.         }

  10.         public static void method() {
  11.                
  12.                 int z = 2;
  13.                 int n = 10;
  14.                 for (int i = 5; i > 0; i--) {
  15.                         if (i == 5) {
  16.                                 System.out.println(method1(i) + str1 + str1 + method1(n - 2) + str1 + str1);
  17.                         } else {
  18.                                 System.out.println(method1(i) + str1 + method1(z) + str1  + method1(n - z - 2) + str1 + method1(z) + str1);
  19.                                 z = z + 2;
  20.                         }
  21.                 }
  22.                 System.out.println(str1 + method1(n * 2) + str1);
  23.                 System.out.println(str1 + method1(n * 2) + str1);
  24.                 for (int i = 0; i <= 10; i++) {
  25.                         if (i == 10) {
  26.                                 System.out.println(method1(i) + str1);
  27.                         } else {
  28.                                 System.out.println(method1(i) + str1 + method1(20 - 2*i) + str1);
  29.                         }
  30.                 }
  31.         }
  32.         public static String method1(int m){
  33.                 StringBuffer sb = new StringBuffer();
  34.                 for (int i = 0; i < m; i++) {
  35.                         sb.append(str);
  36.                 }
  37.                 return sb.toString();
  38.         }
  39. }
复制代码
回复 使用道具 举报
呵呵,不错啊啊啊
回复 使用道具 举报
本帖最后由 花心々小土豆 于 2013-5-7 13:48 编辑
冰深 发表于 2012-12-6 14:52
再来一个会转弯的:效果如下:

1        2        3        4        5        6        
  1. /**
  2.         循环转圈打印一个二维数组,格式如下:
  3.         1                 2                 3                 4                  5                6

  4.         20                21                22                23                24                7

  5.         19                32                33                34                25                8

  6.         18                31                36                35                26                9
  7.         
  8.         17                30                29                28                27                10

  9.         16                15                14                13                12                11

  10.         思路:观察上面数组可知,由外往内看,每一圈数字都是按顺时针递增的,我们可以定义一个适合大小的数组,按照这种顺时针的方式给数组里的每个元素赋值,最后将这个数组打印即可。

  11.         @author 小土豆
  12. */
  13. class  xunhuandayin
  14. {
  15.         public static void main(String[] args)
  16.         {
  17.                 int n=6;                        //可以通过改变n的值来控制输出的二维数组
  18.                 int arr[][] =new int[n][n];
  19.                
  20.                 show(arr,n);
  21.                 print(arr,n);
  22.         }
  23.         public static void show(int[][]arr,int n)
  24.         {
  25.                 int x,y,k=0,s=1;
  26.                 while(n>0)                        //下面四个for语句控制一圈数字
  27.                 {
  28.                         for(x=k,y=k;y<n;y++)                //从左到右
  29.                                 arr[x][y]=s++;
  30.                         for(x=k+1,y=n-1;x<n;x++)        //从上到下
  31.                                 arr[x][y]=s++;
  32.                         for(x=n-1,y=n-2;y>=k;y--)        //从右到左
  33.                                 arr[x][y]=s++;
  34.                         for(x=n-2,y=k;x>k;x--)                //从下到上
  35.                                 arr[x][y]=s++;
  36.                         n=n-1;                                        //进入内层圈中
  37.                         k=k+1;
  38.                 }
  39.         }
  40.         public static void print(int[][] arr,int n)
  41.         {
  42.                 for(int i=0;i<n;i++)
  43.                 {        
  44.                         for(int j=0;j<n;j++)
  45.                                 System.out.print(arr[i][j]+"\t");
  46.                         System.out.println();
  47.                         System.out.println();
  48.                 }
  49.         }
  50. }
复制代码
这个我以前做过,贴出来一起分享下:handshake

未命名.jpg (9.51 KB, 下载次数: 0)

未命名.jpg
回复 使用道具 举报
本帖最后由 花心々小土豆 于 2013-5-7 14:16 编辑
黑马李勇 发表于 2012-11-29 20:24
不知道这个- - 给不给加分,很早之前做的一个题目!
  1. /**
  2.         打印如下格式:
  3.         1        3        4        10        11

  4.         2        5        9        12

  5.         6        8        13

  6.         7        14

  7.         15

  8.         @author 小土豆
  9. */

  10. class  NumDemo
  11. {
  12.         public static void main(String[] args)
  13.         {
  14.                 int        num=8;                //改变num的值得到想要的输出效果
  15.                 int arr[][]=new int[num][num];

  16.                 show(arr,num);
  17.                 print(arr,num);
  18.         }
  19.         public static void show(int[][] arr,int num)
  20.         {
  21.                 int k,l,m,n,s=1;
  22.                 for(int i=0, j=1;i<num;i+=2,j+=2)
  23.                 {
  24.                         for(k=0;k<j;k++)
  25.                                 for(l=i;l>=0;l--)
  26.                                         if(l+k==i)
  27.                                                 arr[k][l]=s++;
  28.                         for(m=j;m>=0;m--)
  29.                                 for(n=0;n<=i+1;n++)
  30.                                         if(m+n==j)
  31.                                                 arr[m][n]=s++;
  32.                 }
  33.         }
  34.         public static void print(int[][] arr,int num)
  35.         {
  36.                 for(int i=0;i<num;i++)
  37.                 {        
  38.                         for(int j=0;j<num;j++)
  39.                                 if(i+j<num)
  40.                                         System.out.print(arr[i][j]+"\t");
  41.                         System.out.println();
  42.                         System.out.println();
  43.                         System.out.println();
  44.                 }
  45.         }
  46. }
复制代码
我做过的类似的!按照下面图片中的黄色线想,规律很好看出。

NumDemo.jpg (41.4 KB, 下载次数: 0)

NumDemo.jpg
回复 使用道具 举报
好东西,mark
回复 使用道具 举报
cxj 中级黑马 2014-12-3 12:25:41
30#
很好的东西,学习中
回复 使用道具 举报
各种表演啊   哈哈
回复 使用道具 举报
:L不简单啊。谁打个面具出来我瞧瞧呗?
回复 使用道具 举报
我已经头晕了。本来学了个输出三角形就觉得很厉害。居然还有这么麻烦的图案。头转不过来
回复 使用道具 举报
太顶尖桂花工
回复 使用道具 举报
12
您需要登录后才可以回帖 登录 | 加入黑马