iT邦幫忙

0

程式語言JAVA問題(有關方法中的FOR嵌套IF語句)

  • 分享至 

  • xImage

各位大大好,最近在自我學習JAVA,練習到有一個情境是要線性的查找陣列中的元素指標數。
我原本寫了一個方法程式碼如圖:

https://ithelp.ithome.com.tw/upload/images/20220320/20144615TIzaiiCgha.png
原本我想要達到的效果是IF有一樣就回傳i的值,else的話就回傳一個-1表示沒有找到。但是發現好像不能這樣寫因為這樣會有兩個return,所以暫時放棄這種寫法。後來看了講師寫成以下語句
https://ithelp.ithome.com.tw/upload/images/20220320/20144615ASpEk9vzlg.png
照著打居然可以成功,可是我完全看不懂,為甚麼可以這樣寫,我第一種方式的話可以達到一樣效果嗎? 謝謝

看更多先前的討論...收起先前的討論...
888god888 iT邦新手 5 級 ‧ 2022-03-20 17:43:55 檢舉
我後來發現不用寫ELSE就可以了,直接把RETURN寫在FOR循環結束後當作ELSE
888god888 iT邦新手 5 級 ‧ 2022-03-20 17:46:55 檢舉
但還是看不懂第二種的寫法,那樣寫也等同於IF ELSE效果嗎
cloudeasy iT邦新手 5 級 ‧ 2022-03-21 13:14:30 檢舉
在語法上,如果 if 裡面的statement 只有一行,{ }大括號是可以省略

正常寫法
if (condition) {
System.out.println('line')
System.out.println('我屬於 if')
}

省略寫法, 只有if的下一行屬於 if 內部, 第二行之外就不算if
if (condition)
System.out.println('line')
System.out.println('我不屬於 if')

但基於可讀性的緣故,一般不推薦第二種寫法,所以最好還是養成習慣增加大括號
cloudeasy iT邦新手 5 級 ‧ 2022-03-21 13:22:48 檢舉
以往在學 Java, 很多時候觀念是提倡一個 method 只有一個 return 為原則,主要原因是可以提昇可讀性,但程式碼內是可以允許多個return, 依照每個人的寫作習慣不同,不管是有多個return或一個return, 只要別人能輕易一兩眼看出你程式碼在幹麻就行

可以看一下 early return, Guard clause 相關的討論文章
https://stackoverflow.com/questions/884429/better-java-method-syntax-return-early-or-late
https://medium.com/swlh/return-early-pattern-3d18a41bba8
888god888 iT邦新手 5 級 ‧ 2022-03-21 16:07:46 檢舉
這個網頁好像not found,不過謝謝你,我受益良多
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
2
海綿寶寶
iT邦大神 1 級 ‧ 2022-03-20 17:21:00
最佳解答

可以

只要程式沒寫錯的話

第二種寫法的「完整版本」如下

public static int linesearch(int []list,int n) {

   for (int i = 0; i < list.length; i++) {
      if (list[i] == n) {
         return i;
      } else {
      
      }
   }
   
   return -1;
}

如果你看得懂的話
講師寫的是「精簡版本」

888god888 iT邦新手 5 級 ‧ 2022-03-20 21:24:47 檢舉

理解了,這很像我第一種把ELSE刪掉前的寫法,另外{}這個符號好像可以省略,所以兩個都省了以後才會那麼精簡哈哈

1
小魚
iT邦大師 1 級 ‧ 2022-03-20 19:32:55

return 必須在各種情況下都保證有回傳,
需要在for外面有回傳,
才能夠正常編譯.

888god888 iT邦新手 5 級 ‧ 2022-03-20 21:27:42 檢舉

理解了所以不是不能寫兩個RETURN問題是要在FOR結束後也要RETURN一種結果

1

一般這是IF的簡單寫法。
不過正常最好是如下的寫法

if(條件式) return i;

會比較容易判斷寫作的方式。
基本上來說我個人其實並不鼓勵這種寫法。
容易造成讀程式碼的困擾。

在來,一般在物件回傳的性質上。
如果需要判斷值後輸出的情況下。
最好還是用私域變數的方式處理。
在最後才做 return

或許你其實只是想要不要跑那麼多 for 所以才會中間 return 出去。
而認真來說,如果可以我也會盡量不要用FOR來找值。

JAVA有很多能直接搜尋陣列或是物件(LIST)的應用方式。
用FOR的方式找值並不是很好。

我要發表回答

立即登入回答