2015-04-27 22 views
0

在我的代碼中,如果條件應該根據命令行參數而改變。 例如,在下面的代碼:如何根據Java中的命令行參數自動更改「if」條件?

int a = Integer.parseInt(args[0]); 

for (int i = 0; i < 100000; i++) 
{ 
    if (a == 2) 
    if ((i % 25 == 0) || ((i+1) % 25 == 0) 
     // do something 
    else if (a == 3) 
    if ((i % 25 == 0) || ((i+1) % 25 == 0) || ((i + 2) % 25 == 0)) 
     // do something 
    //... 
} 

如果命令行參數的增加,條件的數目內部「如果」應增加。因此,「if」條件取決於命令行參數,它可以在1到50之間。我需要一些最佳方法來避免寫入「if」條件50次。

+0

您要添加另一個(第(i + 1)%25 == 0)與遞增取決於一個數字 '1' 一起? – king

+0

你需要將模式封裝到一個函數中。 「我」似乎是唯一真正改變的部分,所以這應該是一個相當簡單的模式來表示。在函數式語言中,我將'||'在從0到'a'的列表上進行摺疊。在一個命令式的語言中,使用一個使用從0到'a'的索引的for循環和一個跟蹤至少一次是否滿足條件的控制器可以實現同樣的效果。 – Carcigenicate

+0

@Carcigenicate看看我的答案。後者正是我所做的。 –

回答

3

如果你不介意使用布爾標誌,你可以做這樣的事情:

boolean matched; 
for (int iter = 0; iter < a; iter++) { 
    if ((i + iter) % 25 == 0) { 
     matched = true; 
     break; 
    } 
} 
if (matched) { 
    //... 
} 

我沒有測試過這一點,但它應該工作。它所做的是循環遍歷,並且對於0到a-1之間的每個數字iter(含),檢查i + iter mod 25是否爲零。如果是,則將標誌設置爲true,而不管它是否已經。這模擬||的行動,它通過每個行動,如果有的話,停止比較並返回true。如果您想要&&,則默認情況下,您將設置matchedtrue,如果它失敗並中斷,則設置爲false

你也可以在一個方法把這個包,如果你想:

boolean functionNameHere(int a, int i) { 
    boolean matched; 
    for (int iter = 0; iter < a; iter++) { 
     if ((i + iter) % 25 == 0) { 
      matched = true; 
      break; 
     } 
    } 
    return matched; 
} 

取決於如何ia都成立。

+1

我們都獨立來到這個解決方案,所以這得到了我的投票。 – Carcigenicate

0

我想應該是這樣的

boolean ifArgument(int a) { 
    for (int j = 0; j < a; j++){ 
     if ((i+j) % 25 == 0) { 
      return true; 
     } 
    }return false; 
}