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

Java-三-玩转九九乘法口诀表-170531(循环)

2017-05-31 22:20 162 查看
话说:

Java-一-Java安装与相应环境配置;Java-二-第一个程序编写~~ 这两篇笔者后续在补充。

今天上的菜是:用循环做出九九乘法口诀表!犹记得小时候把我们背的死去活来滴。这儿,在下自己摸索了多种解法,分享并记录下。

目标:以“元表”为万变不离其宗之表,变化出左下角、左上角、右上角、右下角四中直角形式九九乘法口诀表。同时,左下角、左上角各自以三种方法呈现,效果图:



这个图使用Excel做的,Excel做这个图的核心是透彻理解相对、绝对引用即可,然后发现行列显示关系即可。横一拉、竖一拉的感觉很美妙!感谢当年的师傅让我接触到了这个。而今,在Java里面实现,背后的数学逻辑也大体如此。

做成如此图,我们找到“元表”。我们都知道,很多事情都有根源,李笑来老师也说过,概念的重要性,不论怎么变化,“元表”都是它们背后的根源。

package Student;//包名
public class Test999 {//类名
public static void main(String[] args) {
for(int i=1;i<=9;i++) {//外层循环,控制行。
for(int j=1;j<=9;j++) {//内层循环,控制列。
System.out.print(i+"*"+j+"="+i*j+"\t");//外循环为1,内循环打印9次,每次不换行,且用\t间隔
}
System.out.println();//每行打印完毕,换行。
}
}
}


效果如下图。后面演示代码只在关键地方做标注,其他请读者自行参阅元表注释啦。



图一:左下角。也就是图1的样式。这就是我们小学时候背诵的标准版口诀表;反正当年笔者是背得滚瓜烂熟,不然,估计没法写代码了~~

直接上代码:

package Student;//包名
public class Test999 {//类名
public static void main(String[] args) {
for(int i=1;i<=9;i++) {//外层循环,控制行。
for(int j=1;j<=9;j++) {//内层循环,控制列。
if(i<j) {//控制输出样式
continue;//不在输出列,换行。在这里,我们可以见识到continue的威力!
}
System.out.print(i+"*"+j+"="+i*j+"\t");//外循环为1,内循环打印9次,每次不换行,且用\t间隔
}
System.out.println();//每行打印完毕,换行。
}
}
}


效果图:



这是法一;我们来看法二输出同样效果:

package Student;//包名
public class Test999 {//类名
public static void main(String[] args) {
for(int i=1;i<=9;i++) {//外层循环,控制行。
for(int j=1;j<=9;j++) {//内层循环,控制列。
if(i>=j) { //这个本质和法一同样,只是这个直接控制控制输出样式而已。法一是i<j continue
System.out.print(i+"*"+j+"="+i*j+"\t");//外循环为1,内循环打印9次,每次不换行,且用\t间隔
}
}
System.out.println();//每行打印完毕,换行。
}
}
}


法三:

package Student;//包名
public class Test999 {//类名
public static void main(String[] args) {
for(int i=1;i<=9;i++) {//外层循环,控制行。
for(int j=1;j<=i;j++) {//内层循环,控制列。既然if都是控制输出形式,我们直接控制列的个数即可。
System.out.print(i+"*"+j+"="+i*j+"\t");//外循环为1,内循环打印9次,每次不换行,且用\t间隔
}
System.out.println();//每行打印完毕,换行。
}
}
}


代码里面可惜不能加粗,不然可以让大家清晰的看到变化的地方。法三当然是最简洁的了。法三与法一、法二区别本质在于,法三就没有把多余的输出,而其他两种方法是全部都打印了,只是按照我们设置的条件显示了部分。所以,法三最节省内存,最高效。尽管这里体现一点也不明显。

欧克!搞定左下角,开始左上角。

法一:这里三种方法思路和左下角一模一样,不在赘述。直接上代码,上图。法一用最简洁方法:

package Student;//包名
public class Test999 {//类名
public static void main(String[] args) {
for(int i=1;i<=9;i++) {//外层循环,控制行。
for(int j=1;i+j<=10;j++) {//这里最核心,控制的是输出列。本质要找到行列的关系表达式:i=j<=10才输出。
System.out.print(i+"*"+j+"="+i*j+"\t");//外循环为1,内循环打印9次,每次不换行,且用\t间隔
}
System.out.println();//每行打印完毕,换行。
}
}
}


效果图:



法二:

package Student;//包名
public class Test999 {//类名
public static void main(String[] args) {
for(int i=1;i<=9;i++) {//外层循环,控制行。
for(int j=1;j<=9;j++) {
if(i+j>10) {//找到表达式,才是王道!这就要靠数学灵感喽。当然这是很简单的规律。
continue;
}
System.out.print(i+"*"+j+"="+i*j+"\t");//外循环为1,内循环打印9次,每次不换行,且用\t间隔
}
System.out.println();//每行打印完毕,换行。
}
}
}


法三:

package Student;//包名
public class Test999 {//类名
public static void main(String[] args) {
for(int i=1;i<=9;i++) {//外层循环,控制行。
for(int j=1;j<=9;j++) {
if(i+j<=10) {//控制输出列
System.out.print(i+"*"+j+"="+i*j+"\t");//外循环为1,内循环打印9次,每次不换行,且用\t间隔
}
}
System.out.println();//每行打印完毕,换行。
}
}
}


帅气!这两个只要规律找到,都是很简单滴!下面我们输出右上角和右下角,这个要稍稍复杂点。这个如果弄明白,打印平行四边形、菱形都是张飞吃豆芽——小菜一碟!

右上角

啰嗦一下,计算机运行只能从左往右,从上往下,所以我们无法听过控制列来不让人家打印左边部分,只能通过条件控制显示方式啦。这个要深刻 体会。所以这两个目前笔者就这种方法。

package Student;//包名
public class Test999 {//类名
public static void main(String[] args) {
for(int i=1;i<=9;i++) {//外层循环,控制行。
//以下代码控制空格输出。
for(int k=1;k<=i-1 ;k++) {//这里最核心的也是找到空格数和行数之间的关系
System.out.print("\t");
}
for(int j=1;j<=9;j++) {
if(i<=j) {//控制显示样式
System.out.print(i+"*"+j+"="+i*j+"\t");//外循环为1,内循环打印9次,每次不换行,且用\t间隔
}
}
System.out.println();//每行打印完毕,换行。
}
}
}


效果图:



这里,笔者要展现一下思路:

首先我们先打印出

1*1 …… …… 1*9

2*2 2 *3 ……2*9

3*3 3*4 …… 3*9

这个我们通过if控制输出即可,然后对应打空格,空格数量思路如下:

行数 空格数

1 0

2 1

3 2

4 3

5 4

6 5

7 6

8 7

9 8

i-1 嘛。

会打印这个空格了,其他应该都是相通的。

右下角

package Student;//包名
public class Test999 {//类名
public static void main(String[] args) {
for(int i=1;i<=9;i++) {//外层循环,控制行。
//以下代码控制空格输出。这里十分关键,明白如何输出,找到空格和行数关系 9-i
for(int k=1;k<=9-i;k++) {
System.out.print("\t");
}
for(int j=1;j<=9;j++) {
if(i+j>=10) {
System.out.print(i+"*"+j+"="+i*j+"\t");//外循环为1,内循环打印9次,每次不换行,且用\t间隔
}
}
System.out.println();//每行打印完毕,换行。
}
}
}


效果图:



奥,空格思路也展示一下:

行数 空格数

1 8

2 7

3 6

4 5

5 4

6 3

7 2

8 1

9 0

帅气!搞定。晚安。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: