2014-01-25 32 views
0

我想調用循環中的方法,直到條件滿足(reps> = 1000),然後跳出循環並測試哪種方法更有效,然後跳回舊方法並忽略已調用的方法調用效率最低。這可能嗎?下面是我的示例代碼:我可以測試for循環中的條件嗎?如果符合,請忽略循環內的方法調用?

// Set the number of times each method is called 
public void setReps(String target, String[] sa, long reps) { 
    shuffleArray(sa); // Shuffle the order of Strings in array 

    for (int i = 0; i < reps; i++) { 
    linearStringSearch(target, sa); 
    backwardLinearStringSearch(target, sa); 
    counter(); // counts winner 

    if (reps >= 1000) 
    chooseAlgorithm(target, sa); 
} 

因此,對於上面的代碼,我將測試linearStringSearch()和backwardLinearStringSearch(),看看哪個是經過1000個循環更有效,然後我想跳回和忽略任何linearStringSearch()或backwardLinearStringSearch()根據結果。我可以在chooseAlgorithm()方法中寫一個新的循環,但如果可能的話,我寧願跳回原來的循環。

+4

我可能使用[策略模式](http://en.wikipedia.org/wiki/Strategy_pattern)。你可以在一個接口中定義一個「stringSearch」方法,通過'linear'和'reverse linear'搜索來實現它......然後編寫另一個實現來測試(a),(b)在選擇之前。 –

+0

看起來不錯。我會給它一個 – LooMeenin

回答

2

無需複雜化這一點。

// Set the number of times each method is called 
public void setReps(String target, String[] sa, long reps) 
{ 
    boolean ChosenFastest = false; 
    boolean ForwardsIsfaster = false; 

    shuffleArray(sa); // Shuffle the order of Strings in array 

    for (int i = 0; i < reps; i++) 
    { 
     if(ChosenFastest){ 
      if(ForwardsIsFaster) 
      linearStringSearch(target, sa); 
      else 
      backwardLinearStringSearch(target, sa); 
     } else { 
     linearStringSearch(target, sa); 
     backwardLinearStringSearch(target, sa); 
     counter(); // counts winner 
     } 

     if (reps == 1000) 
      ChosenFastest = true; 
      if(ForwardsWasFastest()) //similar to choose algorithm 
      ForwardsIsfaster = true; 
      } 
     } 
    } 
} 
+1

Java沒有類型'bool'。那些不是遵循Java風格的名字。 –

+0

@ElliottFrisch布爾值?歡迎您對其進行編輯。 – user3125280

+0

看起來應該對我有用。 –

1

使用繼續;內循環

例如:

for (int x = 0; x > 10; x++) { 
    if(x > 4){ 
     continue; 
    } 
    System.out.println("" + x); 
} 

輸出將永遠到不了5因爲繼續;

來源:Java Continue statement

對於跳回,你可以有一個,如果其中未選擇0 =算法循環內聲明,1 =線性,2 = backwardLinear。

for (int i = 0; i < reps; i++) { 
    if(chosenAlgo == 0) { 
     linearStringSearch(target, sa); 
     backwardLinearStringSearch(target, sa); 
    if(chosenAlgo == 1) { 
     linearStringSearch(target, sa); 
    } 
    else if(chosenAlgo == 2){ 
     backwardLinearStringSearch(target, sa); 
    } 
    counter(); // counts winner 
} 
2

一種方法是使用Strategy pattern。 您可以在接口中定義一個「stringSearch」方法,使用線性和反向線性搜索來實現它...然後編寫另一個實現來測試(a),(b)在選擇之前(可能通過存儲引用「初始化」後的「正確」策略)。您可能需要執行一些不同的(a),(b)迭代來解釋任何「JVM warm-up」期間。

UML for Strategy Pattern

0

一種方法是您可以使用兩個for循環並在java中使用帶標籤的continue語句。

因爲帶標籤的continue語句跳過了用給定標籤標記的外層循環的當前迭代。

源和參考 - continue example