是否可以创建具有可变数量输入值的方法?

问题描述:

我想创建一个沿着[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://*.com/questions/997482/does-java-support-default-parameter-values – 2013-03-06 22:07:44

如果变量参数始终是同一类型(比如字符串),你可以使用数组或列表作为参数,该方法不会在乎什么大小的阵列是,只是它是一个数组

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

你也可以将数组设置为Object []数组,因此你不仅可以传递字符串 – iberbeu 2013-03-06 22:12:10

+0

正确的,或使用ArrayList或其他。只要确保你有异常处理在那里的类型不匹配 – 2013-03-06 22:13:16

最终参数的类型后的三个时期表明最后一个参数可以作为阵列或作为字符串参数的序列进行传递。然后,您可以使用循环不知道像数:

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

在Java数组是动态的,所以他们没有必要方法参数中指定索引

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

+0

这其实是一模一样的'方法名(INT numberOfTimes,串...字符串)' - 除了你必须把空数组,或者如果你做的空不想将任何字符串传递给methodname。 – ddmps 2013-03-06 22:36:47

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(); 
}