先看以下方法的列印結果以及回傳值:
public static void main(String[] args) { System.out.println("返回值:" + testResult()); } public static boolean testResult() { for(int i=1; i<=5; i++) { System.out.println("-------------->开始:" + i); if(i == 3) { return true; } System.out.println("-------------->结束:" + i); } return true; }
列印結果:
---------- ---->開始:1
-------------->結束:1
---------- ---->開始:2
-------------->結束:2
---------- ---->開始:3
傳回值:true,表示在for裡return一個值的話相當於退出循環。
1)假設我們對testResult方法進行重構,抽離出for裡面的邏輯到一個單獨的方法:
public static boolean testResult() { for(int i=1; i<=5; i++) { test1(i); } return true; } public static void test1(int i) throws NullPointerException{ System.out.println("-------------->开始:" + i); if(i == 3) { return; } System.out.println("-------------->结束:" + i); }
同樣放在main方法中。只不過testResult方法的for循環裡直接調的重構的方法,印出結果:
-------------->開始:1
-------------->結束:1
-------------->開始:2
-------------->結束:2
-------------->開始:3
-------------->開始:4
-------------->結束:4
-------------->開始:5
-------------->結束:5
傳回值:true
這說明,test1(i)方法用return;語句試圖走到i=3的時候中斷; 但是循環還是走完了。
2)不妨給for迴圈裡呼叫的方法一個回傳值,如下:
public static boolean testResult() { for(int i=1; i<=5; i++) { return test2(i); } return true; } public static boolean test2(int i) throws NullPointerException{ System.out.println("-------------->开始:" + i); if(i == 3) { return true; } System.out.println("-------------->结束:" + i); return false; }
印出結果如下:
----- --------->開始:1
-------------->結束:1
傳回值:false
這說明,在for裡呼叫一個有boolean回傳值的方法,會讓方法還沒走到i=3就斷掉,回傳一個boolean值。
3)在for迴圈裡需要依照條件return一個boolean值時。 for迴圈裡面的程式碼若需要重構成一個方法時,應該是有回傳值的,但這個回傳值不能是boolean,我們不妨用String代替,而在for迴圈裡面用回傳的String標記來判斷是否要退出迴圈~ ~
改造如下:
public static boolean testResult() { for(int i=1; i<=5; i++) { String flag = test3(i); if("yes".equals(flag)) { return true; } } return true; } public static String test3(int i) throws NullPointerException{ System.out.println("-------------->开始:" + i); if(i == 3) { return "yes"; } System.out.println("-------------->结束:" + i); return "no"; }
列印結果:
-------------->開始:1
-------------->結束:1
-------------->開始:2
#-------------->結束:2
-------------->開始:3
#回傳值:true
說明達到了最初未對for循環裡面的程式碼進行重構時的效果~
以上的小例子是我在對類似程式碼進行重構時報錯的經驗小結,因為實際程式碼裡,for裡面的程式碼重複了好幾次,但是又因為for裡面的程式碼需要根據判斷條件return一個boolean值。在重構的過程中,我先改成test1(i),再改成test2(i), 最後改成test3(i)才該對,達到未重構時的效果。
以上是php中for迴圈遇上return的範例程式碼分享的詳細內容。更多資訊請關注PHP中文網其他相關文章!