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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 马林康 中级黑马   /  2012-6-26 16:19  /  3309 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 马林康 于 2012-6-26 19:17 编辑

期望图形:
*
**
***
****
*****
****
***
**
*

我的代码
  1.     public static void printTriangle_3(int n){
  2.             for(int i=1;i<=n/2+1;i++){
  3.                     for(int j=1;j<=i;j++)
  4.                             System.out.print("*");
  5.                     System.out.println("");
  6.             }
  7.             for(int i=1;i<=n/2;i++){
  8.                     for(int j=1;j<=n/2-i;j++)
  9.                             System.out.print("*");
  10.                     System.out.println("");
  11.             }
  12.     }
复制代码
那里错了 老是打印成这样
*
**
***
****
*****
***
**
*

7 个回复

倒序浏览
public static void printTriangle_3(int n){
  
    for(int i=1;i<=n/2+1;i++){
  
      for(int j=1;j<=i;j++)
       {
  
        System.out.print("*");
       }
      System.out.println("");
  
    }
    //再或者i=0;
    for(int i=0;i<=n/2;i++){
         //j=0;或者j<=n/2-i=1;
      for(int j=1;j<=n/2-i;j++)//原因不好解释 因为你只有自己读一遍代码就是知道第一次只打印三个;
       //j=1; n/2-i=4; 只循环了三次当然就只打印三个星;所以你可以在这儿写成j<=n/2+1;还可以
       //j=0;//也可以把i=0;
       {
        System.out.print("*");
       }
      System.out.println("");
  
    }
  
  }
回复 使用道具 举报
本帖最后由 邱国 于 2012-6-26 16:47 编辑
  1. package qiuguo.heima.test;

  2. public class sanjiao {

  3.         /**
  4.          * @param args
  5.          */
  6.         public static void main(String[] args) {
  7.                 // TODO Auto-generated method stub
  8.                 printTriangle_3(12);

  9.         }
  10.     public static void printTriangle_3(int n){
  11.             
  12.         for(int i=1;i<=n/2+1;i++){

  13.                 for(int j=1;j<=i;j++)

  14.                         System.out.print("*");

  15.                 System.out.println("");

  16.         }

  17.         for(int i=1;i<=n/2;i++){

  18.                 for(int j=1;j<=n/2-i+1;j++)   //<font color="red">lz这里出问题了,应该再要加上1,不然刚好算少了一行*
  19. </font>
  20.                         System.out.print("*");

  21.                 System.out.println("");

  22.         }

  23. }

  24. }
复制代码
看我贴的代码,for(int j=1;j<=n/2-i;j++)
改为:for(int j=1;j<=n/2-i+1;j++)
这是经常会漏的问题,在各种排序算法中

评分

参与人数 1技术分 +1 收起 理由
黄奕豪 + 1 赞一个!

查看全部评分

回复 使用道具 举报
public static void printTriangle_3(int n){

            for(int i=1;i<=n/2+1;i++){

                    for(int j=1;j<=i;j++)

                            System.out.print("*");

                    System.out.println("");

            }

            for(int i=1;i<=n/2;i++){

                    for(int j=1;j<=n/2-i;j++)//把i改为0这样就可以了

                            System.out.print("*");

                    System.out.println("");

            }

    }
回复 使用道具 举报
分析你的代码可知,你是第二个for循环出现问题,在看你的*在列数上相差一个可知是for循环的嵌套的for循环出现问题。
因为外层的for循环是控制行的,里面for循环是控制列的。
修改后的代码如下:
  1. class Demo
  2.     {
  3.                 public static void main(String[] args)
  4.                 {
  5.                         printTriangle_3(8);
  6.                 }
  7.                
  8.                 public static void printTriangle_3(int n){
  9.             for(int i=1;i<=n/2+1;i++){
  10.                     for(int j=1;j<=i;j++)
  11.                             System.out.print("*");
  12.                     System.out.println("");
  13.             }
  14.             for(int i=1;i<=n/2;i++){
  15.                     for(int j=0;j<=n/2-i;j++)
  16.                             System.out.print("*");
  17.                     System.out.println("");
  18.             }
  19.     }
  20.     }
复制代码

评分

参与人数 1技术分 +1 收起 理由
黄奕豪 + 1 赞一个!

查看全部评分

回复 使用道具 举报
for(int i=1;i<=n/2;i++)
{       
for(int j=1;j<=n/2-i+1;j++)               
System.out.print("*");
System.out.println("");
}
红色的地方,循环控制条件有问题,比对输出结果可以发现,少了一行,加上一个1即可,有时候出现问题了不要慌,在循环里边改下条件,基本都能解决了

评分

参与人数 1技术分 +1 收起 理由
黄奕豪 + 1 赞一个!

查看全部评分

回复 使用道具 举报
  1. class ArrayDemo
  2. {
  3. public static void main(String[] args)
  4. {
  5. printTriangle_3(6);
  6. }
  7. public static void printTriangle_3(int n){

  8. for(int i=1;i<=n/2+1;i++){

  9. for(int j=1;j<=i;j++)
  10. System.out.print("*");
  11. System.out.println("");
  12. }

  13. for(int i=1;i<=n/2;i++){
  14. for(int j=1;j<=n/2-i+1;j++)//<FONT color=darkgreen> 经过测试,是该for语句中少算了一个1.
  15. </FONT>System.out.print("*");
  16. System.out.println("");
  17. }
  18. }
  19. }
  20. <IMG border=0 alt="" src="http://bbs.itheima.com/forum.php?mod=image&aid=3652&size=300x300&key=ef230b82e7e1d5b630effd26def9480e&nocache=yes&type=fixnone" aid="attachimg_3652">
复制代码

未命名.jpg (13.34 KB, 下载次数: 83)

未命名.jpg
回复 使用道具 举报
for嵌套循环的知识
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马