iT邦幫忙

0

初級JAVA程式釋義~FOR迴圈的?是什麼

  • 分享至 

  • xImage

課本上九九乘法表的迴圈寫法看不懂,

請教
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

(i==9 ? '\n' : ' ')
(判斷的條件 ? 是true 的話做的事 : 是false的話做的事)
ch_lute iT邦新手 5 級 ‧ 2020-05-25 15:46:35 檢舉
google 三元運算子
要選擇貼程式碼的格式喔,這樣可讀性會比較好.
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
1
鬼王很慘
iT邦新手 2 級 ‧ 2020-05-25 15:47:24
最佳解答

你一二點不理解的部分是一樣的,就是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為真,輸出換行,反之輸出空格。

1
通靈亡
iT邦高手 1 級 ‧ 2020-05-25 15:51:13

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

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標簽.....等。
這後續你可以再查一下文件學習。

根本像考題,超不直覺

我要發表回答

立即登入回答