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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 金鑫 中级黑马   /  2012-6-11 12:09  /  2487 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

今天看毕老师的循环打印,自己思考的几个问题求解
/*    54321
   *  5432
   *  543
   *  54
   *  5
   * */

这个图形如何打印求解,思考了半天结果都不对


这个图形,视频中是用双层循环嵌套的2个for打印出来的
  *
  **
  ***
  ****
  *****

  /* for (int x=0; x<5 ;x++ )
  {
   for (int y=0 ; y<=x ; y++ )
   {
    System.out.print("*");
   }
   System.out.println();
  }
  System.out.println("----------------------");*/

后来发现用一个for也能打印出来,用到的是累加思想
  String name ="*";
  String name2 = "";
  for (int i = 0; i <5; i++) {
   name2+=name;//通过累加思想。每一行的星数都是上一行的星数加*
   System.out.println(name2);
  }

   *****      
   ****      
   ***        
   **         
   *
这个图形能不能用一个for打出来。。。。

评分

参与人数 1技术分 +1 收起 理由
黄奕豪 + 1 想法不错,你可以利用substring的方法,一.

查看全部评分

7 个回复

倒序浏览
楼主想法很好!那你何不用一个累减的思想?
用Stringbuffer操作动态字符串,每循环一次去掉最后的一个*;
StringBuffer mybuf=new StringBuffer(“*****”);
去掉最后一个mybuf.delete(mybuf.length()-1,mybuf.length());
回复 使用道具 举报

但是二元运算符-=不能操作字符串,所以你的想法不能实现

本帖最后由 胡卿 于 2012-6-11 14:51 编辑

  String name ="*****";
  String name2 = "";
  for (int i = 0; i <5; i++) {
   name2+=name;//通过累加思想。每一行的星数都是上一行的星数加*
   System.out.println(name2);
  }

有人会想:
既然这样可以
那么
for (int i = 0; i <5; i++) {
   name2-=name;//通过累加思想。每一行的星数都是上一行的星数加*
   System.out.println(name2);

是不是也行呢


其实是不可以的 ,因为二元运算符“-=”是不可以作用于字符串的


所以要实现以上图形还是需要for循环嵌套或者使用二维数组
回复 使用道具 举报
本帖最后由 唐志兵 于 2012-6-11 12:29 编辑

  1. public class printInt {
  2.         public static void main(String[] args) {
  3.                 for(int x = 4 ;x >= 0 ;x--){
  4.                         for(int y = 0; y <= x; y++){
  5.                                 System.out.print("*");
  6.                         }
  7.                         System.out.println();
  8.                 }
  9.         }
  10. }
复制代码
第一次循环,x=4,内嵌的for()要循环5次 从y=0 到 y=4;   循环完成后打印换行。
第二次循环,x=3,内嵌的for() 要循环 4次,从0到3,打印换行。
第三次新欢,x=2,内嵌for循环3次,从0-2
....................................................................

俺这种方法是不是很简单呢。。?
回复 使用道具 举报
for(int i=0;i<p;i++){
                        for(int j=0;j<p-i-1;j++){
                                System.out.print(" ");
                        }
                        for(int j=0;j<i+1;j++){//双重循环里面的 范围通常是个不定的值,与主循环的I相对应
                                System.out.print("* ");
                        }System.out.println();
                }
                for(int i=0;i<p-1;i++){
                        for(int j=0;j<i+1;j++){//j与i+1的差 即是 当前行 的重复 值
                                System.out.print(" ");
                        }
                        for(int j=0;j<p-1-i;j++){
                                System.out.print("* ");
                        }System.out.println();
                }
   循环嵌套一下就好 ,每一行的前面空行和星的数量在其中找到关系来写个for循环的嵌套
回复 使用道具 举报
给一个思路:打印某些图形,一般用二维数组来完成比较简单,思路也也会明朗。
例如:打印V字形,也就是如下图:

对于这个图形就可以创建一个二维数据来存储数据,那么二维数组里有几个一维数组,一维数组里面又有几个元素呢,这很简单就看图形里面有几行就有几个一维数组,一行中有多少个单元,那么一维数组里面就有几个元素。好了那么下面咱们就可以用程序来创建二维数组,并将按图形的格式数据存储到数组中,最后打印这个二维数组就可以了。
可能你还会想一个问题就是怎么存储这些数据呢,这个咱们来分析一下数据的特点:1应该存储在arr[0][0],2应该存储在arr[1][1] 依次类推如下图:

这样咱们就可以按这个规律来完成数据的存储了。

下面附上程序代码:
  1. int len = 5;
  2. int row = 3;
  3. int[][] arr = new int[row][len];
  4. int x = 0;
  5. boolean tag = false;
  6. for(int y=0;y<len;y++){
  7.    arr[x][y]=y+1;
  8.    if(!tag)
  9.       x++;
  10.    else
  11.       x--;
  12.    if(x==row){
  13.       x=row-2;
  14.       tag=true;
  15.   }
  16. }
  17. for(int r=0;r<row;r++){
  18.     for(int c=0;c<len;c++){
  19.        int value = arr[r][c];
  20.        if(value==0){
  21.             System.out.print(" ");
  22.        }else{
  23.             System.out.print(value);
  24.        }
  25.     }
  26.    System.out.println();
  27. }
复制代码

评分

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

查看全部评分

回复 使用道具 举报
代码前几位说的很多了,我就谈谈思想吧,循环就是限定个条件,然后在条件下运行,输入的行数是一个规律,每一行的排列方式又是规律,这样就有了两个循环的嵌套
回复 使用道具 举报
之前在嵌套循环做九九乘法表的时候就想到了这个问题,利用一个for语句实现九九乘法表,纠结了半天还是弄出来了。
我的想法是:既然不能能用嵌套循环,又要实现嵌套的效果,那么我们只有改变循环的条件。
下面是单for 实现代码
  1. for (int i=5,j=1;i>=j ;i-- )
  2.        {
  3.                 System.out.print(i);
  4.                 if (i==j)
  5.                     {
  6.                            i=6;//因为要-1所以定义为6
  7.                            j++;
  8.                            System.out.println();
  9.                     }
  10.       }
复制代码
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马