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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© thoris 中级黑马   /  2015-4-14 20:35  /  855 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. <div class="blockcode"><blockquote>/**
  2. * 自定义一个数x,打印出一个2x+1的区域,
  3. *自定义两个字符,通过字符差异显示出心形。
  4. *作用:1、可以打印空心心形
  5. *                        2、打印实心心形
  6. *                        3、自定义不同字符,达到不同的显示效果
  7. *  修改记录:
  8. *  1、最初只是测试做一个空心菱形,菱形上下对称,所以一开始要输入一个奇数。
  9. *  2、做完之后发现要是把菱形上半部分复制,下半部分放大,就是个心形了,于是改成做一个心形。
  10. *  3、菱形直接复制和放大后的心形,棱角太分明,于是把心形上部和两边修了一下,比较圆润。
  11. *  4、此时发现如果输入数字小于7,形状不能体现,所以改成要大于6.
  12. *  5、加入自定义字符功能
  13. *  6、发现不能输入空格,于是只好用1和2来代替一个空格和两个空格
  14. *  
  15. */
  16. import java.util.Scanner;
  17. public class Heart2
  18. {
  19.         public static void main(String [] args)
  20.         {
  21.                 Scanner input=new Scanner(System.in);
  22.                 int num;
  23.                 System.out.println("请输入一个大于6的奇数");//宽度的一半,大于6是为了显示好看
  24.                 num=input.nextInt();               

  25.                 while(num<6||num%2==0){
  26.                         System.out.println("请输入一个大于6的奇数");
  27.                         num=input.nextInt();                       
  28.                 }
  29.                 System.out.println("请输入一个字符或汉字");//自定义字符,不能定义空格,所以用1、2替代
  30.                 String str1=input.next();
  31.                 if(str1.equals("1")){
  32.                         str1=" ";
  33.                 }
  34.                 if(str1.equals("2")){
  35.                         str1="  ";
  36.                 }
  37.                 System.out.println("请输入一个字符或汉字");
  38.                 String str2=input.next();
  39.                 if(str2.equals("1")){
  40.                         str2=" ";
  41.                 }
  42.                 if(str2.equals("2")){
  43.                         str2="  ";
  44.                 }

  45.                 for(int x=(num+1)/2,y=0;x>1&&y<(num+1)/2;x--,y++){//上半部分,

  46.                         if(y==0||y==1){//第一行要全部打出,第二行为了避免棱角分明,所以也全部打印
  47.                                 print(2*num+1,str1);//调用静态方法
  48.                                 System.out.println();
  49.                         }
  50.                         if(y>1){
  51.                                 print(x,str1);
  52.                                 print(2*y-1,str2);
  53.                                 print(x,str1);
  54.                                 print(x+1,str1);//这部分可以合并,但是是从两个菱形的上半部演化而来,保留比较好理解
  55.                                 print(2*y-1,str2);
  56.                                 print(x,str1);
  57.                                 System.out.println();
  58.                         }
  59.                 }
  60.                 for(int x=2,y=num-1;x<=num+1&&y>=0;x++,y--){//下半部分
  61.                         if(x==2){//初始值为2,是因为两边也要削平,避免棱角
  62.                                 print(x,str1);
  63.                                 print(y-2,str2);
  64.                                 print(3,str1);
  65.                                 print(y-2,str2);
  66.                                 print(x,str1);
  67.                                 System.out.println();               
  68.                         }
  69.                         if(x>2&&y>0){
  70.                                 print(x,str1);
  71.                                 print(2*y-1,str2);
  72.                                 print(x,str1);
  73.                                 System.out.println();               
  74.                         }
  75.                         if(y==0){//最后全打印
  76.                                 print(2*num+1,str1);
  77.                                 System.out.println();
  78.                         }
  79.                 }
  80.                 input.close();

  81.         }
  82.         //有参无返回的静态方法,打印x个字符串str
  83.         static void print(int x,String str){               
  84.                 for(int i=0;i<x;i++){
  85.                         System.out.print(str);
  86.                 }       
  87.         }
  88. }
复制代码


刚学完面向对象部分,很多还不太理解。多多交流。

2 个回复

倒序浏览
这个如果在Eclipse里显示出来经常会有问题。。。命令行里反而效果比较好。
回复 使用道具 举报
不错哦,楼主加油
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马