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

时间:2022-04-26 23:58:07

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

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

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

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

这个图使用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();//每行打印完毕,换行。
}
}
}

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

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

图一:左下角。也就是图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();//每行打印完毕,换行。
}
}
}

效果图:

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

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

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();//每行打印完毕,换行。
}
}
}

效果图:

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

法二:

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();//每行打印完毕,换行。
}
}
}

效果图:

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

这里,笔者要展现一下思路:
首先我们先打印出
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();//每行打印完毕,换行。
}
}
}

效果图:

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

奥,空格思路也展示一下:
行数 空格数
1 8
2 7
3 6
4 5
5 4
6 3
7 2
8 1
9 0

帅气!搞定。晚安。