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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 宋智超 中级黑马   /  2013-7-5 22:08  /  1759 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

题目:打印一个空心的菱形。
       这个题目挺经典的,做法也很多,我选择用二维数组做,好处是代码较短,所嵌套的语句不多,难点在于参数的设置。

代码分享如下:
  1. import java.util.Scanner;
  2. class lingxing1 {
  3. public static void main(String[] args) {
  4. Scanner input = new Scanner(System.in);
  5. System.out.print("请输入要打印拼成菱形上半个三角形的行数,x = ");
  6. int x = input.nextInt();
  7. int n=2*x-1;
  8. char [][] arr = new char[n][n];
  9. for (int h=0;h<n;h++){
  10. for (int l=0;l<n;l++){
  11. int a=h+l;
  12. int b=h-l;
  13. int c=(n-1)/2;
  14. int d=n-1;
  15. if ((a==c)|(a==(c+d))|(b==c)|(b==-c)) {
  16. arr[h][l]='*';
  17. }
  18. else
  19. arr[h][l]=' ';
  20. System.out.print(arr[h][l]);
  21. }
  22. System.out.println();
  23. }
  24. }
  25. }
复制代码
运行结果如下:



本人新手,还在学习基础中。

评分

参与人数 1技术分 +1 收起 理由
杨兴庭 + 1

查看全部评分

4 个回复

倒序浏览
class Demo1
{
        public static void main(String[] args)
        {                  
                printUpStar();
                printDownStar();
        }        
        //负责上半部分的换行
        public static void printUpStar()
        {
                for (int x=1;x<=5 ;x++ )
                {
                        printUpSpace(x);
                        printUpstr(x);
                        System.out.println();
                }
        }
        //打印上半部分的空格
        public static void printUpSpace(int x)
        {
                for (int y=x;y<5 ;y++ )
                {
                        System.out.print(" ");
                }
        }
        //打印上部分的星号
        public static void  printUpstr(int x)
        {
                for (int z=1;z<=x ;z++ )
                {
                        if (z==1 || z==x)
                        {           
                                System.out.print("* ");
                        }
                        else
                                System.out.print("  ");
                }
        }
        //打印下部分
        public static void printDownStar()
        {
                for (int x=1;x<=5 ;x++ )
                {
                        printDownSpace(x);
                        printDownStr(x);
                        System.out.println();
                }
        }
        //打印下部分的空格
        public static void printDownSpace(int x)
        {
                for (int y =1;y<=x ;y++ )
                {
                        System.out.print(" ");
                }
        }
        //打印下部分的星号
        public static void printDownStr(int x)
        {
                for (int z=x;z<5 ; z++)
                {
                        if (z==x || z==4)
                        {
                                System.out.print("* ");
                        }
                        else
                                System.out.print("  ");
                }
        }
}

评分

参与人数 1技术分 +1 收起 理由
杨兴庭 + 1

查看全部评分

回复 使用道具 举报
其实想要达到“代码较短,所嵌套的语句不多”,输出部分可以只用两层for循环,一个print实现,一个println()就可以简单实现

如果追求再简化,组合使用使用条件表达式甚至可以只用一层for循环,一个print也能实现。{:soso_e100:}
回复 使用道具 举报

  1. public class Demo2 {

  2.         /**
  3.          * @param args
  4.          */
  5.         public static void main(String[] args) {
  6.                 // TODO Auto-generated method stub
  7.                 int hangshu = 10;  
  8.                 int yiban = hangshu / 2 + 1;  
  9.                 int yibanduo = hangshu / 2;  
  10.                 System.out.println("空心菱形:");  
  11.                 for(int k = 1;k <= yiban;k++){  
  12.                     for(int i = 1;i <= (yiban - k);i++){  
  13.                         System.out.print(" ");  
  14.                     }  
  15.                     System.out.print("*");  
  16.                     for(int i = 1;i <= ( (k - 2) * 2 + 1);i++){  
  17.                         System.out.print(" ");  
  18.                     }  
  19.                     if(k != 1){  
  20.                         System.out.print("*");   
  21.                     }  
  22.                     System.out.println();  
  23.                 }  
  24.                 for(int k = yibanduo;k >=1;k--){  
  25.                     for(int i = 1;i <= (yiban - k);i++){  
  26.                        System.out.print(" ");  
  27.                     }  
  28.                     System.out.print("*");  
  29.                     for(int i = 1;i <= ( (k - 2) * 2 + 1);i++){  
  30.                        System.out.print(" ");  
  31.                     }  
  32.                     if(k != 1){  
  33.                         System.out.print("*");   
  34.                     }  
  35.                     System.out.println();  
  36.                 }
  37.         }

  38. }
复制代码
我是这样的
回复 使用道具 举报
差不多跟你一样的。没有用键盘接受数据而已
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马