-
- 首先定义for语句的初始值,判定循环条件以及迭代;
在第一个循环当中,a以a=1的身份参与进了运算,即此时输出的结果是1*1=1,完成第一次循环后a会先加1(a++)再判定,判断符合条件后再次进入循环体,输出结果是1 * 2 = 2;一直循环至a=9,输出的结果是1 * 9 = 9 此处也可以理解为:先将九九乘法表的第一列输出出来。for (int a = 1 ; a <= 9; a++){ System.out.println(1 + "*" + a + "=" + a*1); }
- 此时的1*a中,因为a会从1循环到9,所以才会生成以上乘法表的第一列,1是定死的。那么,如果1本身也成为了一个可以循环的变量,在1计算完从1 * 1到 1 * 9 的计算之后,前者循环至2 ,然后在进行从2 * 2到2 * 9 的循环计算,以此类推,直到9 * 9,这是否可行呢?
for (int b = 1 ; b<=9 ; b++) { for (int a = 1; a <= 9; a++) { System.out.println(b + "*" + a + "=" + b * a); } }
我们将”b循环“嵌套在“a循环”上,同时,将本来a循环内的 1 * a 中的 “1” 替换成 “b”。
修改之后的循环是,b以等于1的身份参与到 a循环里,然后开始了类似上一步的循环:开始输出 1 * 1 = 1 ; 1 * 2 = 2...... 1 * 9 = 9;当本轮a循环结束后, b的值会加1(b++);也就是2;经过判定条件 b<= 9的“确认”后,再次进入a循环开始输出2 * 1 = 2; 2*2 = 4 ; ...... 2 * 9 = 18 ;本轮a循环结束后, b的值会再次加1;也就是3;以此类推,直至循环至 9 * 9 = 81,b循环与a循环均循环结束。
但很明显, 输出的乘法出现了重复,在乘法表中,第二个乘数始终不大于第一个乘数,也就是在我们的语法里,a应该小于等于 b。
所以,我们将a循环 的判定条件修改为 a <= b
修改前:
修改后:
此时的循环是,b以等于1的身份参与到 a循环里,输出 1 * 1 = 1 ;但因为a<=b,a+1的结果无法通过判定条件,所以本轮a循环结束;当本轮a循环结束后, b的值会加1(b++);也就是2;经过判定条件 b<= 9的“确认”后,再次进入a循环开始输出2 * 1 = 2; 2*2 = 4 ,而后本轮a循环再次结束;b再次加一等于3,而后3 * 1 =3...... ;以此类推,直至循环至 9 * 9 = 81,b循环与a循环均循环结束。for (int b = 1 ; b<=9 ; b++) { for (int a = 1; a <= b; a++) { System.out.println(b + "*" + a + "=" + b * a); } }
- 至此,九九乘法表的所有计算已经全部输出,只剩下最后的修饰了。
再在循环体内后加一个空格的转义字符,使每个乘法间加以区分for (int b = 1 ; b<=9 ; b++) { for (int a = 1; a <= b; a++) { System.out.print(b + "*" + a + "=" + b * a); } }
再使每结束一次a循环就换一次行,换行的方法是在b循环语句内a循环语句后加上一个空的println输出语句for (int b = 1 ; b<=9 ; b++) { for (int a = 1; a <= b; a++) { System.out.print(b + "*" + a + "=" + b * a + "\t"); } }
for (int b = 1 ; b<=9 ; b++) { for (int a = 1; a <= b; a++) { System.out.print(b + "*" + a + "=" + b * a + "\t"); } System.out.println(); }
for (int b = 1 ; b<=9 ; b++) { for (int a = 1; a <= b; a++) { System.out.print(a + "*" + b + "=" + b * a + "\t"); } System.out.println(); }