課本上九九乘法表的迴圈寫法看不懂,
請教
1.i=(i==9)?((++j/j)+1):(i+1))這個遞增式“?”的功能 跟這段寫法的意涵
2.輸出時%c是印出後面代入的字元(i==9 ? '\n' : ' ') 這裡也有點看不懂。
請問有版友可以解釋一下嗎?
感謝!
public class Testfor3 {
public static void main(String[] args) {
for(int i=2,j=1;
j<10;
i=(i==9)?((++j/j)+1):(i+1)){
System.out.printf("%d*%d=%2d%c",i, j, i * j,(i==9 ? '\n' : ' ') );
}
}
}
輸出為:
21= 2 31= 3 41= 4 51= 5 61= 6 71= 7 81= 8 91= 9
22= 4 32= 6 42= 8 52=10 62=12 72=14 82=16 92=18
23= 6 33= 9 43=12 53=15 63=18 73=21 83=24 93=27
24= 8 34=12 44=16 54=20 64=24 74=28 84=32 94=36
25=10 35=15 45=20 55=25 65=30 75=35 85=40 95=45
26=12 36=18 46=24 56=30 66=36 76=42 86=48 96=54
27=14 37=21 47=28 57=35 67=42 77=49 87=56 97=63
28=16 38=24 48=32 58=40 68=48 78=56 88=64 98=72
29=18 39=27 49=36 59=45 69=54 79=63 89=72 99=81
你一二點不理解的部分是一樣的,就是Java中的三元運算子(ternary operator),或稱為條件運算子(conditional operator)。
語法如下:
booleanExpression ? expression1 : expression2
A ? B : C
當A為True,返回B
當A為False,返回C
所以
i=(i==9)?((++j/j)+1):(i+1)
i會以兩種情況賦值
若i==9為真,i=(++j/j)+1
若i==9為假,i=i+1
i==9 ? '\n' : ' '
若i==9為真,輸出換行,反之輸出空格。
i=(i==9)?((++j/j)+1):(i+1))這個遞增式“?”的功能 跟這段寫法的意涵
i在這邊代表被乘數
你仔細觀察輸出的變化:2
* 1 、 3
* 1 、 4
* 1 一直到 9
* 1
接著被乘數又變為 2
* 2
所以如果i==9 ,乘數j往上+1,被乘數i變成j自己除以自己後+1 ,重新回到2
(i==9)?((++j/j)+1)
如果不是,則從目前的數字i往上加
:(i+1)
這樣寫法稱之為三元運算子,相當於下列寫法:
// i = (i == 9) ? ((++j / j) + 1) : (i + 1)
if (i == 9) {
i = ++j / j;
}
else {
i = i + 1;
}
i==9 ? '\n' : ' '
這邊對應到printf的%c
當你被乘數到9後(9 * n),要換到下一行,輸出換行字元('\n')
否則每一個結果中間輸出一個空白字元(2*1=2 3*1=3)
1.i=(i==9)?((++j/j)+1):(i+1))這個遞增式“?”的功能 跟這段寫法的意涵
已經有邦友告訴你是三元運算式的,這邊就不在解釋三元運算子。
原則上,這算是一種多元式迴圈的應用方式。
因為一般學習的是用兩個for來跑會比較直覺。
我猜這可能是要讓你練習for真正的用法,才會採用這樣的多元變數處理。
所以你真正需要了解的是你的for動作是在做啥的。
2.輸出時%c是印出後面代入的字元(i==9 ? '\n' : ' ') 這裡也有點看不懂。
我想你不懂的地方因該是\n這個代表什麼。其實在許多語言中,\n都是代表著換行的意思。
有時會有\r\n這樣的用法。一般是windows系統,才比較有機會用到\r
其它還有許多特殊的用法。如\s可能代表空白\t代表tab標簽.....等。
這後續你可以再查一下文件學習。