黑马程序员技术交流社区
标题:
一道题目
[打印本页]
作者:
hacker◊紫猫
时间:
2014-10-3 23:44
标题:
一道题目
在 上课时,一次考试中老师出了这么一道题目:/*利用程序输出如下图形:黑马程序员—一道有趣的题目 -
要求打印输出
*
**
***
****
*****
******
*******
******
*****
****
***
**
*
本人当时做了半天做出来一个版本,当然是最笨的那种,我能做出来就很不容易了,以为世界上就这一个答案,我以为就这一种方法,讨论的时候我发现我错了,答案有好几种,通过这件事我明白了,不要轻易认为你的答案是对的,也不要认为你的是最好的,一切皆有可能,要开发思路,吸取经验,多考虑多练习。java的魅力是无穷的。
先说说我的做法,最笨的那种,当然还有最笨的就是只用System.out.println("*")这一种语句打印出来。乳沟真那样我也就不用今黑马了。我的代码思想是;for循环先打印出上半个三角,在for循环打印出下半个循环。代码如下
class Demo3
{
public static void main(String []args)
{
for (int i=0;i<7 ;i++ ) |for循环打印上半个三角
{ |
for (int j=0;j<i+1 ;j++ ) |
{ |
System.out.print("*"+" "); |
} |
System.out.println(""); |
}
for (int i=6;i>0 ;i-- ) |for循环打印下半循环
{ |
for (int j=0;j<i ;j++ ) |
{System.out.print("*"+" "); |
} |
System.out.println("");
}
}
}
这个代码用了两个for循环但是我同学用一个for循环就做出来了他的具体思想是见一个for循环
精髓在判断语句中y<=x && y<=14-x这个是关键
黑马程序员—一道有趣的题目 - cuijianru1990 - cuijianru1990的博客
class TuXing {
public static void main(String[] args) {
for (int x=1; x<=13; x++) //共13行。
{
for (int y=1; y<=x && y<=14-x; y++) //这句话的意思是y<=x并且y<=14-x上半个三角y<=x起
{ //作用下半个三角y<=14-x起作用
System.out.print("* ");
}
System.out.println();
}
}
}
这并不是最终版本,万万没想到还有第三个方法。这个方法中用到了绝对值,因为Math函数属于java.lang所以不需要掉包。具体如下
class For2 {
public static void main(String[] args) {
xunhuan(0); //调用函数传入值
xunhuan(7); //调用函数传入值
}
public static void xunhuan(int n) { //定义循环函数
for(int x=1; x<=7; x++) {
for(int y=1; y<=Math.abs(n-x); y++) { //Math.abs()意思为把一个数的绝对值算出来
System.out.print(" *");
}
System.out.println();
}
}
}
我并不保证这是唯一的三个写法,也许还有更简单的方法,也许还有比我做的更笨的方法,但一个人的力量是有限的我在黑马写下这篇博客请求跟多的人来谈论方法,也希望给新学习java的同学一些启发。
作者:
海燕
时间:
2014-10-4 10:00
楼主,谢谢分享哦
作者:
逍遥呆
时间:
2014-10-4 14:17
留下,看看
作者:
笑脸迷人
时间:
2014-10-4 15:57
不错,:)
作者:
水竹
时间:
2014-10-4 17:44
来个一个for循环的:
class Demo
{
public static void main(String[] args)
{
int n = 7;
for (int i=0,x=0,j=n-1; x<n*n;i++,x++)
{
if(i+Math.abs(j)==n){
System.out.println();
i=0;
j--;
}
System.out.print('*');
}
}
}
复制代码
作者:
18643448863
时间:
2014-10-4 17:52
一千个程序员编写一个问题 可能出一千种答案 呵呵 没有最好 之后更好 当然也是没有笨的 只有更笨的 毕竟笨的方法是最容易想到的,如何简化代码 让程序变得简练 就得靠思想和代码量了
作者:
mingtianrsm
时间:
2014-10-4 18:21
找到规律就很好弄了。
public class Test1 {
public static void main(String[] args) {
tuXing(13);
}
public static void tuXing(int line/*用来传递行数*/) {
if(line%2 == 1) { //对行数进行判定,如果是奇数行,进行如下处理
int num = line/2 +1;
for(int i = 1; i <= line; i ++) {
/*根据规律可以得出,图形上面部分是每行'*'的个数就是其所在的行数,可以通过简单的递增就行;
* 当行数达到要输出行数的一半时,规律发生变化,这时要输出的'*'数其实就是总行数减去所在行数加1,这样在
* 通过循环输出就行了。*/
if(i < num) {
for(int j = 0; j < i; j ++) {
System.out.print("*");
}
}else {
for(int j = 0; j <= line-i; j ++) {
System.out.print("*");
}
}
System.out.println();
}
}else { //对行数进行判定,如果是偶数行,进行如下处理
int num = line/2;
for(int i = 1; i <= line; i ++) {
/*和奇数行时其实类似,不同点就在与当行数为偶数时,他们有单独的中间行,也就是他最中间有两行,
* 所以num行与num+1行都是中间行,判断时,用<=判定*/
if(i <= num) {
for(int j = 0; j < i; j ++) {
System.out.print("*");
}
}else {
for(int j = 0; j <= line-i; j ++) {
System.out.print("*");
}
}
System.out.println();
}
}
}
}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2