利用for循环的嵌套打印六种类型的 * 形三角。
示例一:

package test;

/**
 * 打印如下图形:
 *             *****
 *             ****
 *             ***
 *             **
 *             *
 *             
 * 打印上述反向三角的时候,让内循环初始化的值等于外循环x的值即可。       
 * @author jeremy
 *
 */
public class Triangle1 {

    public static void main(String[] args) {

        for(int x = 0; x < 5; x ++) {

            for(int y = x; y < 5; y ++) {

                System.out.print("*");

            }

            System.out.println();

        }
    }
}

示例二:

package test;

/**
 * 打印如下图形:
 * 
 *              *
 *              **
 *              ***
 *              ****
 *              *****
 *              
 * 打印上述正三角形的时候,让内循环的判断条件等于外循环x的值即可(<=)。规律:正向的三角,内循环的判断
 * 条件后面跟外循环的变量即可。
 * @author jeremy
 *
 */
public class Triangle2 {

    public static void main(String[] args) {

        for(int x = 0; x < 5; x ++) {

            for(int y =0; y <= x; y++ ) {

                System.out.print("*");

            }

            System.out.println();

        }
    }
}

示例三:

package test;

/**
 * 打印如下图形:
 * 
 *           *****
 *            ****
 *             ***
 *              **
 *               *
 * @author jeremy
 * 
 * 在Triangle1的基础上,每一行打印x个空格,即可完成上述图形。
 * 
 *
 */
public class Triangle3 {

    public static void main(String[] args) {
        for(int x = 0; x < 5; x ++) {

            for(int y = x; y < 5; y ++) {

                System.out.print("*");

            }

            System.out.println();

            /*
             * 这个for循环,在每次换行之后,打印x个数量的空格
             */
            for(int j = 0; j <= x; j ++) {

                System.out.print(" ");

            }
        }
    }
}

示例四:

package test;

/**
 * 打印如下图形:
 *            *
 *           **
 *          ***
 *         ****
 *        *****
 * @author jeremy
 *
 *  只需要在Triangle2的基础上,每行先打印x个空格即可打印上述图形。
 */
public class Triangle4 {

    public static void main(String[] args) {

        for(int x = 0; x < 5; x ++) {

            /*
             * 这个循环在每行打印*前,先打印x个空格
             */
            for(int j = 4; j > x; j --) {
                System.out.print(" ");
            }

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

            System.out.println();
        }
    }
}

示例五:

package test;

/**
 * 打印如下图形:
 *           
 *              *******
 *               *****
 *                ***
 *                 *
 * 
 * @author jeremy
 *
 *  1)根据Triangle3,先将每行前的空格打印出来,第一步结果如下:
 *                          *******
 *                           *******
 *                            *******
 *                             *******
 *
 *  2)第二步工作只需要控制每一行的*数量即可,即找出init(初始行*的个数)和x(行数)之间的关系:
 *                          每一行*的数量 = init - 2x   
 *  即x每增加1,每一行的*数量减少2个
 *  
 *  3)在内循环控制判断条件,即可打印上述图形
 */

public class Triangle5 {

    public static void main(String[] args) {

        int init = 17;

        //打印上述图形,初始行*的个数与整个图形行数的关系是 第一行*个数 / 2 + 1,例如第一行*个数(init) = 7的时候,有4行,以此类推
        for(int x = 0; x < (init / 2 + 1); x ++) {

            //每一行*的数量 = init - 2x
            for(int y = 0; y < (init - 2 * x); y ++) {     
                System.out.print("*");
            }

            System.out.println();

            //这个循环在换行后先打印x个空格
            for(int j = 0; j <= x; j ++) {
                System.out.print(" ");
            }

        }
    }
}

示例六:

package test;

/**
 * 打印如下图形:
 * 
 *          *
 *         ***
 *        *****
 *       *******
 *          .
 *          .
 *          .
 *          
 *          
 * @author jeremy
 *
 *  思路同Triangle5,只是打印空格的循环先于换行语句执行,以及需要根据整个三角的行数确定每行打印空格的个数。
 */

public class Triangle6 {

    public static void main(String[] args) {

        int base = 15;

        //打印上述图形,初始行*的个数与整个图形行数的关系是 (最后一行*个数 / 2 + 1),例如最后一行*个数(base) = 7的时候,有4行,以此类推
        for(int x = 0; x < (base / 2 + 1); x ++) {

            //每行空格的个数 = 最后一行*个数 / 2 
            for(int j = (base / 2); j > x; j --) {
                System.out.print(" ");
            }

            //第(x + 1)行*的个数 = 最后一行*的个数(base) - 2 * (整个三角形的行数 - (x + 1)),这里貌似很麻烦,但是我想不到更好的方法了,希望大家指点,继续改进
            for(int y = 0; y < (base - 2 * ((base / 2 + 1) - (x + 1))); y ++) {
                System.out.print("*");
            }

            System.out.println();
        }
    }
}

写代码之前,最重要的是先有思路,然后写出步骤,分阶段完成各个目标,达到最终结果。