黑马程序员技术交流社区

标题: 用for嵌套循环画心,更高级输入数字越大心越大 [打印本页]

作者: 黑马嗨嗨嗨    时间: 2017-3-19 00:59
标题: 用for嵌套循环画心,更高级输入数字越大心越大
其实用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("");
                 }
         }
}


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







作者: 南山南    时间: 2017-3-19 01:03
明天敲敲试试

作者: lvshen9    时间: 2017-3-19 09:05
很六啊

作者: mrwalker    时间: 2017-3-19 18:19
学习了,谢谢
作者: 泪桥    时间: 2017-3-19 23:48
这个可以试试,不错
作者: 橘子哥    时间: 2017-3-20 10:28
老哥稳!
作者: yangxiaosa    时间: 2017-3-20 12:42
{:8_474:}{:8_474:}{:8_474:}
作者: wpfly    时间: 2017-3-20 12:53
晚上敲敲  算算

作者: ys5214    时间: 2017-3-20 15:58
可以可以
作者: 南槿。    时间: 2017-3-20 23:51
厉害了。666
作者: 南槿。    时间: 2017-3-21 00:01
厉害了大哥!
作者: Itheima_he    时间: 2017-3-21 00:28
厉害了!不扶墙,就服你
作者: 名字不太重要    时间: 2017-3-21 01:03
太6了,我的哥

作者: zlwxf    时间: 2017-3-21 11:39
错误代码就不要发了

作者: 黑马嗨嗨嗨    时间: 2017-3-21 14:26
zlwxf 发表于 2017-3-21 11:39
错误代码就不要发了

不可能啊!


作者: zlwxf    时间: 2017-3-21 14:30
黑马嗨嗨嗨 发表于 2017-3-21 14:26
不可能啊!

已经运行了。但不是其结果,兄弟

作者: 黑马嗨嗨嗨    时间: 2017-3-21 14:48
zlwxf 发表于 2017-3-21 14:30
已经运行了。但不是其结果,兄弟

你拍张图我看下你那里写错了,我用DOS运行也没错啊!


作者: newu    时间: 2017-3-21 18:28
厉害了,收藏了,感谢楼主的无私分享

作者: zlwxf    时间: 2017-3-21 18:56
黑马嗨嗨嗨 发表于 2017-3-21 14:48
你拍张图我看下你那里写错了,我用DOS运行也没错啊!

已经改好了。抱歉了,你的逻辑思维很不错,不过这些东西在工作时是没有什么用的

作者: 黑马嗨嗨嗨    时间: 2017-3-21 20:08
zlwxf 发表于 2017-3-21 18:56
已经改好了。抱歉了,你的逻辑思维很不错,不过这些东西在工作时是没有什么用的
...

工作需要的技术是你学的百分之五十~

就是做着好玩~哈哈哈哈

作者: 精诚所至    时间: 2017-3-21 20:08
学习了

作者: linzpcom    时间: 2017-3-21 23:03
厉害,看起来好复杂

作者: wugenhui    时间: 2017-3-22 08:54
666666666

作者: 情不知所起    时间: 2017-3-22 11:56
怎么看不懂啊

作者: 風中雨来    时间: 2017-3-22 12:47
厉害了

作者: anyupeng    时间: 2017-3-22 19:22
楼主是是就业班学生,还是已经都工作了啊

作者: 雷先生    时间: 2017-3-22 20:13
说得好,有用。
作者: 一点一DI    时间: 2017-3-22 20:51
没学到这里。。。懵懂...
作者: 大黄蜂    时间: 2017-3-23 01:25
厉害了,大牛啊
作者: 夜影鬼手    时间: 2017-3-23 11:44
可以可以思维,打算尝试哈
作者: 扁舟    时间: 2017-3-23 18:37
我的那个神呐,佩服你了
作者: zhouxiaoyang    时间: 2017-3-23 19:11
可以吗

作者: LiuJiFei    时间: 2017-3-24 10:18
很溜,我想输出一次的,没找到规律

作者: wangzhao    时间: 2017-3-24 20:31
顶!d=====( ̄▽ ̄*)b

作者: yewei    时间: 2017-3-25 07:57
鼓励下,楼主加油哦
作者: 935539    时间: 2017-3-25 09:05
感谢分享
作者: 若梦蓝山悠长    时间: 2017-3-25 20:04
可以的楼主!

作者: 13570836889    时间: 2017-3-26 00:21
厉害,把for用到这个

作者: gc20128381    时间: 2017-3-26 00:25
厉害了

作者: gsong1    时间: 2017-3-26 18:08
在web中标签。foreache你可以试试
作者: yy297970409    时间: 2017-3-26 23:53
楼主厉害了  明天试试
作者: 或许我是对的i    时间: 2017-3-27 08:06
稳稳的

作者: 灬Wonder    时间: 2017-3-27 12:46
66666666666666666666666666
作者: 若梦蓝山悠长    时间: 2017-3-27 17:28
学霸带带我
作者: OnlyDotaer    时间: 2017-3-27 22:25
就服你,你当时怎么想的,太厉害了
作者: 预料中的意外    时间: 2017-3-28 11:20
666,很6,有时间也试试
作者: 597824751    时间: 2017-3-28 11:25
可以的,老哥稳
作者: zxcasdf555    时间: 2017-3-29 22:11
值得一试啊
作者: 降天雪    时间: 2017-3-30 13:34
这个很牛
作者: 黑马59期学员    时间: 2017-3-30 14:20
本帖最后由 黑马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的值可以进行修改,从而变换出各种大小的心型图案,据多次修改验证,改方法目前有效的解决该问题,费了老大劲,看在我辛苦完成这道题的份上,多给些技术分,谢谢!




作者: lwever    时间: 2017-3-31 19:24
看这个问题,好难啊

作者: xiaomilu    时间: 2017-3-31 21:50
厉害...........
作者: 轻风24    时间: 2017-4-1 01:29
这几天刚好学到for循环了,感觉到这里才有意思了,能够做一些看得见的小程序了.
作者: 陆权允    时间: 2017-4-1 10:34
6666      晚上敲敲试试
作者: MMM521    时间: 2017-4-1 22:17
打星星*  可简单了   一个for循环 不停的打印星星   加个IF  语句条件换行  就ok了   
作者: 陆权允    时间: 2017-4-3 00:04
顶起,666666666666666666666
作者: 哈哈人MM    时间: 2017-4-3 21:47
两个for循环,一个if就搞定。
作者: 千千阙歌    时间: 2017-4-3 23:22
看看看看了
作者: g1336855116    时间: 2017-4-5 23:06
顶起,666666666666
作者: 剑桥子卿卿    时间: 2017-4-15 09:38
很好啊,哈哈
作者: 雪飞舞舞    时间: 2017-4-15 10:31
学习了。。。。。。
作者: 翔宇yyz    时间: 2017-4-16 10:28
6666666666666666666666666666
作者: 落幕的伪装    时间: 2017-4-17 14:02
可以的,努力,我想看看。
作者: 名老头    时间: 2017-11-19 13:15
也是醉了





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2