2013-03-06 88 views
0

我想創建一個沿着[return] methodName(int numberOfTimes, String[numberOfTimes] strings)的方法,這意味着,根據numberOfChoices的值,我可以將該數量的String值添加到該方法。是否可以創建具有可變數量輸入值的方法?

我想知道,因爲它在編譯時會失敗,因爲numberOfChoices沒有被定義,並且,如果它可以編譯,它仍然會很難工作出來。

我想我最好的選擇與String... strings去,做一個for循環是這樣的:

void methodName(int numberOfTimes, String... strings) { 
    for(int i = 0, i < numberOfTimes; i++) { 
     // do something with strings[i] 
    } 
} 

但我仍然不知道我本來想是可能的。

編輯:我是啞巴,而且我總是在工作區外的「分享」我的方法思考,這就是爲什麼我希望它在可能的最普遍的方式工作。解決方案是真正刪除numberOfChoices,並根據需要在methodName剛剛引入儘可能多的String對象。一些沿着methodname("One", "Two")的行。因此,固定的代碼將是...

void methodName(String... choices) { 
    for(int i = 0; i < choices.length; i++) { 
     // do something with choices[i] 
    } 
} 
+2

請告訴我理性從也許驗證具有第一參數,除了的?你可以隨時傳遞儘可能多的參數。 – Perception 2013-03-06 22:06:40

+1

'numberOfTimes'確實顯得多餘確實...... – assylias 2013-03-06 22:07:42

+0

你可能想看看這個帖子:http://stackoverflow.com/questions/997482/does-java-support-default-parameter-values – 2013-03-06 22:07:44

回答

0

如果變量參數始終是同一類型(比如字符串),你可以使用數組或列表作爲參數,該方法不會在乎什麼大小的陣列是,只是它是一個數組

void methodName(int numberOfTimes, String[] myStrings) 
+0

你也可以將數組設置爲Object []數組,因此你不僅可以傳遞字符串 – iberbeu 2013-03-06 22:12:10

+0

正確的,或使用ArrayList或其他。只要確保你有異常處理在那裏的類型不匹配 – 2013-03-06 22:13:16

0

最終參數的類型後的三個時期表明最後一個參數可以作爲陣列或作爲字符串參數的序列進行傳遞。然後,您可以使用循環不知道像數:

for (String stringParam: args) { 
    // your logic on stringParam 
} 
0

在Java數組是動態的,所以他們沒有必要方法參數中指定索引

[返回]方法名(INT numberOfTimes,字符串[]字符串) 它的工作原理

+0

這其實是一模一樣的'方法名(INT numberOfTimes,串...字符串)' - 除了你必須把空數組,或者如果你做的空不想將任何字符串傳遞給methodname。 – ddmps 2013-03-06 22:36:47

0

Java將可變參數當作數組處理,因此您可以像正常一樣遍歷strings

實施例(返回用空格級聯中的所有字符串):

public void wordsToSentence(String... words) { 
    final StringBuilder builder = new StringBuilder(); 
    boolean notFirst = false; 
    for (String s : words) { 
     if (notFirst) builder.append(" "); 
     else notFirst = true; 
     builder.append(s); 
    } 
    return builder.toString(); 
} 
相關問題