首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Java相关 >

请问一下这个三角形的右边部分是如何实现的

2013-04-21 
请教一下这个三角形的右边部分是怎么实现的public class Tower2{final static int M9static void count(

请教一下这个三角形的右边部分是怎么实现的
public class Tower2
{
    final static int M=9;
    static void count(int n,int k)         //递归方法,输出一行
    {
        int i;
        if (n==1)                          //在1前留空
           for (i=1; i<=M-k; i++) 
               System.out.print("   ");
        System.out.print("  "+n);
        if (n<k)  
        {
            count(n+1,k);
            System.out.print("  "+n);
        }
    }  
    
    public static void main(String args[])
    {
        int i;
        for (i=1; i<=M; i++) 
        {
           count(1,i);
           System.out.println();
        }
    }
}
/*
                          1
                       1  2  1
                    1  2  3  2  1
                 1  2  3  4  3  2  1
              1  2  3  4  5  4  3  2  1
           1  2  3  4  5  6  5  4  3  2  1
        1  2  3  4  5  6  7  6  5  4  3  2  1
     1  2  3  4  5  6  7  8  7  6  5  4  3  2  1
  1  2  3  4  5  6  7  8  9  8  7  6  5  4  3  2  1

 
 */


[解决办法]
一步步的debug你就知道是怎么回事了。
关键是if (n<k)里的这一句
System.out.print("  "+n);




[解决办法]
可以把这个三角看成3各部分  
比如第一行 8个空格  1
    第二行 7个空格  1-2  1
    第三行 6个空格  1-3  2-1
    第四行 5个空格  1-4  3-1
    .。。。
规律很好找吧  
做一个循环
for(int i=1;i<=9;i++){
  打印(9-i)个空格
  打印1到i
  打印(i-1)到1
}
[解决办法]
package example.tower;

public class Tower {

@SuppressWarnings("unused")
private final int size = 9;

public static String printTower(int size) {
if (size == 1)
{
System.out.println(" 1");
return "";
} else {
for (int i = 1; i <= size; i++) 
{
if (i == size) 
{
System.out.print(" " + i + " ");
for (int index = size - 1; index >= 0; index--) 
{

if (index == 0) 
{
System.out.println();
}
else
{
System.out.print(" " + index + " ");
}
}
} else 
{
System.out.print(" " + i + " ");
}
}
return printTower(size - 1);
}

}

public static void main(String[] args) {
printTower(9);
}
}


刚刚写的,比较乱,差不多一个意思,楼主勉强看看吧。

热点排行