*
  ***
  *****
 *******
********* 像这种题目 我遇到很多,可是一点思路都没有,不知道该怎么上手,只是知道用for循环和if语句,知道他的运行顺序,但是不知道为什么要这么写?求哪位大神好心给我讲解下。谢谢

解决方案 »

  1.   

    lz这种题目用for循环就可以完成,首先要知道它的规律,每行之间的区别,就比如第一行有四个空格,第二行有三个空格,所以可以用以一递增的函数;第一行有一个星星,第二行有三个星星,以三递增的函数;找到规律了,才能用程序写出来,下面是一个程序和结果:public class King {
    public static void main(String argc[]) {
    int t;
    java.util.Scanner san = new java.util.Scanner(System.in);
    System.out.print("请输入行数: ");
    t = san.nextInt();
    for (int i = 1; i <= t; i++) {
    for (int f = 1; f <= (t - i); f++)
    System.out.print(" ");
    for (int ff = 1; ff <= (2 * i - 1); ff++)
    System.out.print("*");
    System.out.println();
    }
    }
    }
    请输入行数: 5
        *
       ***
      *****
     *******
    *********
      

  2.   


    给你看看我之前写的一个例子,里面注释还挺详细的!楼主加油控制wholeCnt和leftCnt的值,能打印出不同的效果:-------
    leftCnt = wholeCnt
    0000*
    000**
    00***
    0****
    0****
    00***
    000**
    0000*leftCnt = 0
    *0000
    **000
    ***00
    ****0
    *****
    *****
    ****0
    ***00
    **000
    *0000leftCnt = wholeCnt / 2
    00*00
    0***0
    *****
    *****
    0***0
    00*00
    public class DrawGraph {
        public static final char SRC_CONTANT_CH = '0';
        public static final char OBJ_CONTANT_CH = '*';
        public static void main(String[] args) {
            int wholeCnt = 5;         // 每行的字符数
            int leftCnt = 2;          // 第一行从左边第几个开始画
            printWhole(wholeCnt, leftCnt);
        }
        
        /**
         * Description: 打印全部<br> 
         * 打印图形的重点在于,控制填充字符的begin和end,然后有规律地增加和减少
         */
    public static void printWhole(int wholeCnt, int leftCnt) {
    // 保证leftCnt和wholeCnt的准确性
            if (leftCnt < 0 || leftCnt > wholeCnt) { return; }
            
            int begin = 0;
            int end = wholeCnt;
            // 打印上半部分
            for(int i = 0; i < wholeCnt; i++) {
                begin = leftCnt - i;      // begin从leftCnt开始,往前填充
                end = leftCnt + i + 1;    // end从leftCnt开始,往后填充
                printOneLine(wholeCnt, begin, end);
                // 当填充满一行的时候,退出
                if (begin <= 0 && end >= wholeCnt) {  break; }
            }
            // 打印下半部分,从原来的begin和end逐个递减就可以了
            for(;;begin++,end--) {
                printOneLine(wholeCnt, begin, end);
                // 当填充满一行的时候,退出
                if (begin == leftCnt) {  break;  }
            }
        }
        
        /**
         * Description: 打印一行<br> 
         */
        public static void printOneLine(int n, int begin, int end) {
            if (begin <= end) {
                // 前端/后端的范围校验
                if (begin < 0) { begin = 0; }
                if (end > n) { end = n; }
                
                // 通过数组填充来实现拼接      
                char[] chs = new char[n];         
                Arrays.fill(chs, SRC_CONTANT_CH);
                Arrays.fill(chs, begin, end, OBJ_CONTANT_CH);
                System.out.println(chs);
            }
    }
    }
      

  3.   


    public class Test3 { public static void main(String[] args) {
    printXX(5);
    } private static void printXX(int line) {
    for(int i=1;i<=line;i++){
    for(int j=1;j<=line-i;j++){
    System.out.print(" ");
    }
    for(int k=1;k<=2*i-1;k++){
    System.out.print("*");
    }
    System.out.println();
    }
    }}
      

  4.   

    干嘛一定要在一个方法体内完成呢?为什么不写一个print(int num, String info)方法(处理把info打印num次) 我是下面那样写的,你自己弄个main方法就可以运行了class  OutPutStyle {
    /*我是菜鸟*/
    public OutPutStyle(){
    }
    /*****
    *三角形
    *
    ***/
    public  void printSJX(int lineN){
    for(int i=1;i<=lineN;i++){
    print(lineN-i," ");
    print(i,"* ");
    System.out.println();
    }
    }
    /*****
    *菱形
    *
    ***/
    public  void printLX(int lineN){
    int centerN=lineN/2 +1;
    printSJX(centerN);
    for(int i=1;i<=centerN;i++){
    print(i," ");
    print(centerN-i,"* ");
    System.out.println();
    }
    }
    /*****
    *
    *矩形
    ***/
    public  void printJX(int rowN,int lineN){
    for(int i=1;i<=rowN;i++){
    print(lineN,"* ");
    System.out.println();
    }
    }
    /*****
    *
    *
    ***/
    private  void print(int num, String info){
    for(int i=0;i<num;i++){
    System.out.print(info);
    }
    }
    }
      

  5.   

    java50题,很经典的,你做完了之后这种题肯定没问题的。