看板 java 關於我們 聯絡資訊
最近在自學JAVA 按照書上習題把程式打出來 卻不知道為什麼答案是這樣子的(可能觀念沒搞懂) class Q4_16 { public static void main(String [] args) { mark1: mark2: for(int i=5 ; i>0 ; i--) mark3: for(int j=0 ; j<5 ; j++) { mark4: if(j==i) break mark1; System.out.print("*"); } } } 這題打出來會出現9個*號, 這題比較沒問題 而下一題就把break改成continue class Q4_17 { public static void main(String [] args) { mark1: mark2: for(int i=5 ; i>0 ; i--) mark3: for(int j=0 ; j<5 ; j++) { mark4: if(j==i) continue mark1; System.out.print("*"); } } } 而這一題, 本以為答案是出現15個*號 但卻出現這樣的訊息 error: not a loop label:mark1 continue mark1; ^ 1 error 我把程式改成以下 class Q4_17 { public static void main(String [] args) { mark1: mark2: for(int i=5 ; i>0 ; i--) mark3: for(int j=0 ; j<5 ; j++) { mark4: if(j==i) continue mark2; System.out.print("*"); } } } 就是15個*號了Q_Q 到底是為什麼呀>"< 希望可以有人幫我解惑(想好久了Q口Q) -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 1.174.5.80
awert:錯誤訊息其實講得很清楚,mark1後面並沒有接任何loop 11/21 23:46
awert:沒有任何loop, 當然就沒辦法在mark1 continue loop 11/21 23:48
charatible:mark這種是goto語法嗎? 11/22 00:41
awert:這叫label, 很類似但不是goto,說實在話很少會用到.. 11/22 00:44
charatible:難怪有人跟我說不要用這個...很模糊 11/22 00:51
bera:再請問一下,那Q4_16的mark1後面也沒有任何loop,卻可以break? 11/22 01:33
bera:Q4_16跟Q4_17有差異點嗎? 還是有點轉不太過來呢~_~ 11/22 01:41
awert:label只是對statement做標記,並非是一種位置 11/22 01:49
awert:break mark1是終止被標成mark1的statement, 不是回到mark1 11/22 01:51
bera:感謝^^ 思路有點慢慢清晰了, 我再慢慢吸收~* 11/22 01:57
qrtt1:如果有新人這麼寫,真想打爆他的頭啊 11/22 09:13
luoqr:還沒用過標籤....最好一輩子都不要用到 11/22 22:34