要求按照逐行逐列打印九九乘法表
效果如:
- 方法一:使用两重for循环就可以
不多说,贴代码:
for(int i=1;i<10;i++) {
for(int j=1;j<=i;j++) {
System.out.print(i+"*"+j+"="+i*j+"\t");
}
System.out.print("\n");
}
- 方法二:定义两个变量,但是步进语句只变化一个变量,代码如下
for(int i=1,j=1;i<10&&j<10;i++) {
System.out.print(i+"*"+j+"="+i*j+"\t");
if(i==j) {
i=0;
j++;
System.out.print("\n");
}
}
这里面需要注意在循环条件那里还需要对j的大小进行控制,不然会打印1*10行(可以测试一下,去掉条件j<10)。
这个方法的思想个人理解为,从数据本身的特点入手,每一行的乘法式里,第二个数字是相同的,第一个数字递增。那么只需要对第一个数字进行++运算。那么如何控制换行?是通过两个数字的关系,当两个数字相等的时候,就该换行了。所以在循环体中有一个if判断。并且每一行中的第一个数字都是从1开始的,所以需要每次换行时对第一个数字“复位”,由于有i++操作,所以复位值为0而不是1.
—嘤嘤嘤…(嘤嘤怪上线)这种方法是老师上课讲过的一种方法,我也很好奇这种思路是怎么想到的T.T哭泣)以上解析就是知道答案之后的强行解释⑧ 有大佬解答一下么 [渴望.jpg]
方法三:格式化输出…
–好吧。。。曾经的笔记我已经看不懂了,咱们江湖再见!(如果以后我变强(秃)了还能想起这事儿,我就回来补上)如果有大佬知道这种怎么弄,求指教!!!
for (int i = 1, j = 1; j < 10; i = (i == j) ? (++j/j) : (++i)) {
System.out.printf("%d*%d=%2d%s", i, j, i * j, (i == j ? '\n': ' ' ));
}
我来了!!!事实证明,笔记记错了算啥 头硬就行!经过调试得到了这个格式化输出的方式。思路也比较简单,跟方法二有点像,又有不同。方法三只是把方法二中的if判断后面的该到了打印语句以及步进语句中。个人感觉这种方式还是少用⑧(……毕竟用大家都比较熟悉的方式比较容易理解)
但是不妨碍拓展思维咯