题目:用java写一个程序,打印如下图形
*
**
***
****
*****
请思考三钞钟,写下你的程序,然后看答案。
我刚毕业时的答案:
package com.albertsong; /** * * @author Albert * */ public class PrintStar { public static void main(String[] args) { for(int i=0;i<5;i++){ for(int j=0;j<i+1;j++){ System.out.print("*"); } System.out.println(); } } }
现在的答案:
package com.albertsong; /** * * @author Albert * */ public class PrintStar { public static void main(String[] args) { System.out.println("*\n**\n***\n****\n*****\n"); } }
看到这里,同学们肯定有话要说了。
我也有话要说,我想说的是:“与人方便,自己方便”。
仅就这个题目而言,显然第二个程序要好得多,它实现了和第一个程序一样的功能。无论从代码行数,还是容易理解的程度,第一个程序都无法与之相比。
讨论1:
M:第一个程序更容易修改,扩展,适应性更强。如果要打印下面的图形,
*
**
***
...
*****...***(注:第100行有100个)
改第二个程序还不累死?
A:如果第二天客户要打印的是下面这个图形呢?
*
**
***
* **
*** *
M:变态!%^&*
A:没有变态的客户,只有懒惰的程序员。
讨论2:
1)
A:到目前为止,这样的图形最多有几行?
G:十行吧
A:随着贵公司的发展,有可能到一百行吗?
G:当然是希望越多越好,但按公司目前的情况,十年之内不太可能。
G:但我们有可能调整业务,那时图形可能会变。
A:变了的话应该还是有一定规律的吧
G:那当然,也不能胡乱调阿,结果基本上不是正三角形就是倒三角形,最多会变成菱形。
2)
A:需不需要能够打印一百行,或者一千行的?
G:不需要,这个图还是昨天拍脑袋出来的,先给我打出来看看效果
A:会不会有中间哪儿少个*号的情况
G:你先别管这么多,先把目前这个问题解决了,中间会不会少*号这会儿还不知道。
讨论3:
T:本来想招个学过Java for循环的程序员阿
A:我们下回是不是把题目改成“用java写一个程序,打印如下图形(请使用for循环)。
现在到底哪个程序好,应该比较清楚了吧。
“不要把简单的事情搞得N复杂”,这句话是针对结果,而不是针对过程的准则。
前几天在闲聊中写道:不要解决不存在的问题,我想更为准确的说法是:不要解决了不存在的问题。
路人甲:哦,懂了,但是,这和前面说到的“与人方便,自己方便”有什么关系?
A:没有一毛钱的关系,如果“认真分析需求,为客户着想”这种理念高尚得让你有点儿难受的话,不妨想想,这样做,实际上可以为自己省下看毛片的时间呀,对不?