日期:2014-05-20  浏览次数:20637 次

在屏幕上用*输出n行金字塔图案
老师说用二重循环,我刚学不会,请高人搭救(用java)
------解决方案--------------------
给你一个代码吧;你自己参考一下;
public class Jinzita {

/**
 * 输出金字塔
 * @param args
 */
public static void main(String[] args) {
// TODO Auto-generated method stub
//金字塔的阶梯行数
int line=30;

//每个阶梯的砖
int num=1;

//i控制行数
        for(int i=1;i<=line;i++){
        
         //j循环控制打印空格;
         for(int j=0;j<line-i;j++){
         System.out.print(" ");
         }
        
         //k循环控制打印*
         for(int k=0;k<num;k++)
         {
         System.out.print("*");
         }
        
         //换行
         System.out.print("\n");
        
         num+=2;
        }
}

}

------解决方案--------------------
引用:
一点思绪都没有,我想到用递归,但是还没学,能给个关键代码吗?

引用:

外层循环负责控制N行,内层循环负责输出空格和星号(根据外层循环层级,配合if)。

这个还是自己尝试写代码吧,不要直接求成品,对你自己没帮助。


//递归么

    public static void main(String[] args) {
        sf(5);
    }

    static void sf(int i) {
        sf(i,1);
    }
    static void sf(int i,int k){
        if(k>i)return;
        printfB(" ",i-k);
        printfB("*",k*2-1);
        System.out.println("");
        sf(i,k+1);
    }

    static void printfB(String k, int i) {
        if (i < 1) {
            return;
        }
        System.out.print(k);
        printfB(k, i - 1);
    }

//这个更短一点

    static void sf(int i) {
        for (int j = 0; j < i; j++) {
            String str = String.format("%" + (i - j) + "s%0" + (j * 2 + 1) + "d", " ", 0);
            System.out.println(str.replaceAll("0", "*"));