您的位置:首页 > 编程语言 > Java开发

<Java>利用for循环在控制台输出99乘法表的探索

2018-02-02 00:57 423 查看
利用for循环在控制台输出99乘法表,效果如下所示。



面对这个问题,第一个想法是:有两组循环,a和b,分别从1递增到9,相乘,打印。

有了想法,就要写出来,发现问题再解决问题。于是…

public class boke {

public static void main(String[] args) {
// TODO 自动生成的方法存根

for(int a=1;a<10;a++) {
for(int b=1;b<10;b++) {
System.out.println(a+"*"+b+"="+a*b);
}
}

}

}


结果是可以预见的。

1*1=1
1*2=2
1*3=3
.....
9*7=63
9*8=72
9*9=81


问题来了,①有很多重复的,比如:1*2=2 与 2*1=2,都会被打印出来,显然这是我们不想要的。②排版问题,乘法表不是一条道直接走下来的,是呈阶梯型,所以还应加以合适的换行,同时为了美观应该在每一个算式中间加入制表符。

问题②比较好解决,修改两个地方:

public class boke {

public static void main(String[] args) {
// TODO 自动生成的方法存根

for(int a=1;a<10;a++) {
for(int b=1;b<10;b++) {
System.out.print(a+"*"+b+"="+a*b+"\t"); //这里将println换成print,同时添加一个制表符
}
System.out.println();                       //添加换行
}

}

}


结果:

1*1=1   1*2=2   1*3=3   1*4=4   1*5=5   1*6=6   1*7=7   1*8=8   1*9=9
2*1=2   2*2=4   2*3=6   2*4=8   2*5=10  2*6=12  2*7=14  2*8=16  2*9=18
3*1=3   3*2=6   3*3=9   3*4=12  3*5=15  3*6=18  3*7=21  3*8=24  3*9=27
4*1=4   4*2=8   4*3=12  4*4=16  4*5=20  4*6=24  4*7=28  4*8=32  4*9=36
5*1=5   5*2=10  5*3=15  5*4=20  5*5=25  5*6=30  5*7=35  5*8=40  5*9=45
6*1=6   6*2=12  6*3=18  6*4=24  6*5=30  6*6=36  6*7=42  6*8=48  6*9=54
7*1=7   7*2=14  7*3=21  7*4=28  7*5=35  7*6=42  7*7=49  7*8=56  7*9=63
8*1=8   8*2=16  8*3=24  8*4=32  8*5=40  8*6=48  8*7=56  8*8=64  8*9=72
9*1=9   9*2=18  9*3=27  9*4=36  9*5=45  9*6=54  9*7=63  9*8=72  9*9=81


现在新的问题出现了,但是也是一个小问题,第一列并不是按照 1*X=Y 的顺序来的,这个好改,在sysout的地方a、b互换位置就行,重点是问题①,大概就是如图形容:



红线上方的内容不需要。

通过观察总结发现红线上方的表现形式是前一个数大于后一个数,所以只需在for里加一个if判断跳出循环就能做到不打印红线上方的内容。改良之后结果如下:

public class boke {

public static void main(String[] args) {
// TODO 自动生成的方法存根

for(int a=1;a<10;a++) {
for(int b=1;b<10;b++) {
if(b>a)
break;                              //添加判断跳出,中断打印
System.out.print(b+"*"+a+"="+a*b+"\t"); //这里将println换成print,同时添加一个制表符
}
System.out.println();                       //添加换行
}

}

}


结果如下:

1*1=1
1*2=2   2*2=4
1*3=3   2*3=6   3*3=9
1*4=4   2*4=8   3*4=12  4*4=16
1*5=5   2*5=10  3*5=15  4*5=20  5*5=25
1*6=6   2*6=12  3*6=18  4*6=24  5*6=30  6*6=36
1*7=7   2*7=14  3*7=21  4*7=28  5*7=35  6*7=42  7*7=49
1*8=8   2*8=16  3*8=24  4*8=32  5*8=40  6*8=48  7*8=56  8*8=64
1*9=9   2*9=18  3*9=27  4*9=36  5*9=45  6*9=54  7*9=63  8*9=72  9*9=81


这个结果看似和文首部分给出的题目很吻合,但是细心的朋友已经发现在文首给出的截图中乘积结果的输出是带有宽度的。



看到这里,我首先想到的并不是加空格,因为明显在程序运行的时候让他自己判断输出的是一位数还是两位数,根据情况加空格显然太复杂,我想到了格式化输出,没错就是给字符串添加宽度。这图中的情况应该是设置宽度为2,经过 查阅资料 。

修改后的代码如下:

public class boke {

public static void main(String[] args) {
// TODO 自动生成的方法存根
for(int a=1;a<10;a++) {
for(int b=1;b<10;b++) {
if(b>a)
break;                              //添加判断跳出,中断打印
//          System.out.print(b+"*"+a+"="+a*b+"\t"); //这里将println换成print,同时添加一个制表符
System.out.print(b+"*"+a+"=");
System.out.printf("%2d",a*b);               //使用printf格式化输出,控制宽度为2
System.out.print("\t");
}
System.out.println();                       //添加换行
}

}

}


结果如下:

1*1= 1
1*2= 2  2*2= 4
1*3= 3  2*3= 6  3*3= 9
1*4= 4  2*4= 8  3*4=12  4*4=16
1*5= 5  2*5=10  3*5=15  4*5=20  5*5=25
1*6= 6  2*6=12  3*6=18  4*6=24  5*6=30  6*6=36
1*7= 7  2*7=14  3*7=21  4*7=28  5*7=35  6*7=42  7*7=49
1*8= 8  2*8=16  3*8=24  4*8=32  5*8=40  6*8=48  7*8=56  8*8=64
1*9= 9  2*9=18  3*9=27  4*9=36  5*9=45  6*9=54  7*9=63  8*9=72  9*9=81


确实很好的复现了文首图中的结果,满分没毛病~~~
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: