课外天地 李树青学习天地Java程序语言课件 → 程序代码——打印菱形


  共有17119人关注过本帖树形打印复制链接

主题:程序代码——打印菱形

帅哥哟,离线,有人找我吗?
admin
  1楼 博客 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 管理员
等级:管理员 帖子:1940 积分:26616 威望:0 精华:34 注册:2003/12/30 16:34:32
程序代码——打印菱形  发帖心情 Post By:2006/2/26 21:35:42 [只看该作者]

public class exec
{
   public static void main( String args[] )
   {
                String s=javax.swing.JOptionPane.showInputDialog("Num");
                int i=Integer.parseInt(s);
                for(int c=0;c<i;c++)
                {
                        for(int d=0;d<Math.abs(c-i/2);d++)
                                System.out.print(" ");  
                        
                        for(int d=0;d<i-2*Math.abs(c-i/2);d++)
                                System.out.print("*");
                        System.out.print("\n");                
                }
                
                System.exit(0);
   }
}

说明:
此程序最大的难点在于设计小循环的次数,需要仔细的分析,找出规律。
以7次为例:
大循环           第一次小循环(空格)    第二次小循环(星号)
0                 3                               1
1                 2                               3
2                 1                               5
3                 0                               7
4                 1                               5
5                 2                               3
6                 3                               1

一般而言,象第一次小循环(打印空格)这种由大变小,再由小变大的数据变化过程可以用求一个数值的绝对值来表达,当数值从正数逐渐过渡到0,在从0逐渐过渡到负数是,它的绝对值将会产生上述情形。
所以,第一次小循环的循环次数为:Math.abs(c-i/2)

至于由小变大,再由大变小的情形与上述相反,可以断定两种情形下数值的和应该为常量,即为一个常量减去上述情形下的数值就为此时的数值。至于二倍的递增关系,可以考虑使用乘以2的方式来表达。
所以,第二次小循环的循环次数为:2*((i+1)/2-Math.abs(c-i/2))-1
化简为:i-2*Math.abs(c-i/2)

[此贴子已经被作者于2010-12-12 07:39:52编辑过]

 回到顶部