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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

其实用for嵌套时,可以将打印的*号看成是一象限上的点,第一个for为纵轴,第二个for为横轴.
将里面的*就是,坐标....下面的代码,为第一次试验做出心
[Java] 纯文本查看 复制代码
public class Heart {
  public static void main(String[] args) {
                for(int x=1;x<=5;x++){
                        for(int y=1;y<=7;y++){
                                if(x==1&&y==3){
                                        System.out.print("**");
                                }
                                else if(x==1&&y==5){
                                        System.out.print("**");
                                }
                                else if(x==2&&y==2){
                                        System.out.print("**");
                                }
                                else if(x==2&&y==4){
                                        System.out.print("**");
                                }
                                else if(x==2&&y==6){
                                        System.out.print("**");
                                }
                                else if(x==3&&y==2){
                                        System.out.print("**");
                                }
                                else if(x==3&&y==6){
                                        System.out.print("**");
                                }
                                else if(x==4&&y==3){
                                        System.out.print("**");
                                }
                                else if(x==4&&y==5){
                                        System.out.print("**");
                                }
                                else if(x==5&&y==4){
                                        System.out.print("**");
                                }
                                else
                                System.out.print("  ");
                        }
                        System.out.println("");
                }
}
}


感觉心太小,就推理规律和通项公式,终于经过一个晚自习的时间,推出来了,虽然有点不完美,但还是不错了...哈哈哈

[Java] 纯文本查看 复制代码
import java.util.Scanner;

public class FinallyHeart {
          public static void main(String[] args) {
                  while(true){
                          System.out.println("请输入数字..输入end结束");
                          String str = new Scanner(System.in).next();
                          if(str.equals("end")){
                                  System.out.println("系统结束");
                                  break;
                          }
                          printHeart(Integer.parseInt(str));
                  }

        }
         public static void printHeart(int n){
                 for(int x=1;x<=2+3*n;x++){
                         for(int y=1;y<=1+4*n;y++){
                                 if(x==1){
                                         if(y==1+n||y==3*n+1){
                                                 System.out.print("**");
                                                 continue;
                                         }
                                 }else if(1<x&&x<n+1){
                                         if(y==n+x||y==3*n+x||y==2+n-x||y==3*n+2-x){
                                                 System.out.print("**");
                                                 continue;
                                         }
                                 }else if(x==1+n){
                                         if(y==1||y==1+2*n||y==4*n+1){
                                                 System.out.print("**");
                                                 continue;
                                         }
                                 }else if(n+1<x&&x<2+3*n){
                                         if(y==x-n-1||y==5*n+3-x){
                                                 System.out.print("**");
                                                 continue;
                                         }
                                 }else if(x==2+3*n){
                                         if(y==1+2*n){
                                                 System.out.print("**");
                                                 continue;
                                         }
                                 }
                                 
                                 System.out.print("  ");
                         }
                         System.out.println("");
                 }
         }
}


缺点就是越大的心,棱角越明显,以后有时间就再改进吧......哈哈哈哈
给几个金币和技术分鼓励鼓励我吧.....嘿嘿嘿






评分

参与人数 1黑马币 +5 收起 理由
橘子哥 + 5

查看全部评分

63 个回复

正序浏览
回复 使用道具 举报
可以的,努力,我想看看。
回复 使用道具 举报
6666666666666666666666666666
回复 使用道具 举报
学习了。。。。。。
回复 使用道具 举报
很好啊,哈哈
回复 使用道具 举报
顶起,666666666666
回复 使用道具 举报
千千阙歌 来自手机 中级黑马 2017-4-3 23:22:44
57#
看看看看了
回复 使用道具 举报
两个for循环,一个if就搞定。
回复 使用道具 举报
顶起,666666666666666666666
回复 使用道具 举报
打星星*  可简单了   一个for循环 不停的打印星星   加个IF  语句条件换行  就ok了   
回复 使用道具 举报
6666      晚上敲敲试试
回复 使用道具 举报
这几天刚好学到for循环了,感觉到这里才有意思了,能够做一些看得见的小程序了.
回复 使用道具 举报
厉害...........
回复 使用道具 举报
看这个问题,好难啊
回复 使用道具 举报
本帖最后由 黑马59期学员 于 2017-3-30 14:22 编辑

int HighLevel(int wide) {
                int i = 0, j = 0, k = 0, t = 0, m = 0, n = 0, count = 1;// i控制循环内高度,j控制每行前面空格,k控制输出的*数
                // t控制高层星号中间空格,m记录高层最底行的星数,以下逐行增4
                // n记录顶行空个数,以下逐行减4;count记录高层高度,与high无关
                m = (wide - 4) / 2;
                do {
                        count++;
                        m -= 4;
                } while (m > 4);
                if ((wide - 4) % 2 == 0)// 区别对待奇偶宽度,奇数中间最小空1个,偶数最小空两个
                {
                        n = 2 + 4 * (count - 1);
                        m--;
                } else
                        n = 1 + 4 * (count - 1);
                for (i = 0; i < count; i++) {
                        for (j = (count - i) * 2; j > 0; j--)
                                System.out.print(" ");
                        for (k = 0; k < m; k++)
                                System.out.print("*");
                        for (t = 0; t < n; t++)
                                System.out.print(" ");
                        for (k = 0; k < m; k++)
                                System.out.print("*");
                        m += 4;
                        n -= 4;
                        System.out.print("\n");
                }
                return 0;
        }

        int LowLevel(int wide) {
                int i = 0, j = 0, k = 0;// i控制输出行,j控制输出每行前的空格,k控制输出*
                int high = 0, tmp = wide;
                do// 计算所需高度
                {
                        high++;
                        tmp -= 4;
                } while (tmp > 4);
                high += 1;
                for (i = 0; i < high; i++) {
                        for (j = 0; j < 2 * i; j++)
                                System.out.print(" ");
                        for (k = wide - 4 * i; k > 0; k--)
                                System.out.print("*");
                        System.out.print("\n");
                }
                return 0;
        }

        public static void main(String[] args) {
                int wide = 50;
                Test4 heart = new Test4();
                heart.HighLevel(wide);
                heart.LowLevel(wide);
        }
注:wide的值可以进行修改,从而变换出各种大小的心型图案,据多次修改验证,改方法目前有效的解决该问题,费了老大劲,看在我辛苦完成这道题的份上,多给些技术分,谢谢!



回复 使用道具 举报
这个很牛
回复 使用道具 举报
值得一试啊
回复 使用道具 举报
可以的,老哥稳
回复 使用道具 举报
666,很6,有时间也试试
回复 使用道具 举报
就服你,你当时怎么想的,太厉害了
回复 使用道具 举报
1234下一页
您需要登录后才可以回帖 登录 | 加入黑马