[問題] 有關迴圈標籤的問題

看板java作者 (= =)時間14年前 (2011/11/21 23:31), 編輯推噓0(0012)
留言12則, 5人參與, 最新討論串1/3 (看更多)
最近在自學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

11/21 23:46, , 1F
錯誤訊息其實講得很清楚,mark1後面並沒有接任何loop
11/21 23:46, 1F

11/21 23:48, , 2F
沒有任何loop, 當然就沒辦法在mark1 continue loop
11/21 23:48, 2F

11/22 00:41, , 3F
mark這種是goto語法嗎?
11/22 00:41, 3F

11/22 00:44, , 4F
這叫label, 很類似但不是goto,說實在話很少會用到..
11/22 00:44, 4F

11/22 00:51, , 5F
難怪有人跟我說不要用這個...很模糊
11/22 00:51, 5F

11/22 01:33, , 6F
再請問一下,那Q4_16的mark1後面也沒有任何loop,卻可以break?
11/22 01:33, 6F

11/22 01:41, , 7F
Q4_16跟Q4_17有差異點嗎? 還是有點轉不太過來呢~_~
11/22 01:41, 7F

11/22 01:49, , 8F
label只是對statement做標記,並非是一種位置
11/22 01:49, 8F

11/22 01:51, , 9F
break mark1是終止被標成mark1的statement, 不是回到mark1
11/22 01:51, 9F

11/22 01:57, , 10F
感謝^^ 思路有點慢慢清晰了, 我再慢慢吸收~*
11/22 01:57, 10F

11/22 09:13, , 11F
如果有新人這麼寫,真想打爆他的頭啊
11/22 09:13, 11F

11/22 22:34, , 12F
還沒用過標籤....最好一輩子都不要用到
11/22 22:34, 12F
文章代碼(AID): #1Eocxb3g (java)
文章代碼(AID): #1Eocxb3g (java)