![](/img/trans.png)
[英]Is it possible to pass input.next - after verification - directly to a method as parameters in a variable length argument list? <in java>
[英]Java: variable length parameters as list for recursion
我想要以下遞歸方法:
private Node getElementRec(Node currentNode, String ... names) {
if (null == names || names.length == 0)
return currentNode;
else {
Node child = currentNode.getChildWithName(names[0]);
return getElementRec(child, namesAux.subList(1, names[1,]));
}
}
由於可變長度 Java 參數(此處names
)是 arrays,我無法制作類似names.sublist(1, names.size())
之類的東西 雖然效率很低,但我嘗試將數組轉換為列表然后傳遞它到方法,但它不接受列表
所以問題是:在 Java 中是否可以對可變長度參數(Type... parameter)
進行遞歸? 像我展示的那樣是可能的嗎?
謝謝
您可以使用 Arrays class 中的 copyOfRange function 來傳遞給 ZC1C425268E68389D1AB4A70
Arrays.copyOfRange(names, 1, names.length)
避免復制的另一種方法是修改您的 function 以接受開始和結束索引:
private Node getElementRec(Node currentNode, int start, int end, String ... names) {
if (null == names || start >= end || start < 0 || end > names.length)
return currentNode;
else {
Node child = currentNode.getChildWithName(names[start]);
return getElementRec(child, start+1, end, names);
}
}
您可以使用names.length
而不是names.size()
Varags ...
java 中的變量是 arrays,而不是您建議的向量。
String... names
是String[] names
的簡寫。 所以你可以試試:
else {
Node child = currentNode.getChildWithName(names[0]);
String[] remainingNames = new String[names.length -1];
System.arrayCopy(names, 1, remainingNames, 0, names.length - 1);
return getElementRec(child, remainingNames));
}
通過索引
private Node getElementRec(Node currentNode, int i, String ... names) {
if (null == names || names.length == i)
return currentNode;
else {
Node child = currentNode.getChildWithName(names[i]);
return getElementRec(child, i+1, names);
}
}
您可以傳遞數組來代替可變參數:
private Node getElementRec(Node currentNode, String ... names) {
String slice[] = ..... // Get sub array from names
....
getElementRec(node, slice);
....
}
首先:可變參數是使用List
實現的,而不是作為向量(向量通常表示java.util.Vector
在 Java 中的subList()
。
正如您所意識到的,collections(特別是List
對象)允許比簡單的 arrays 更豐富的交互。 幸運的是,有一種簡單的方法可以使用Arrays.asList()
將數組轉換為List
。
我將使用List<String>
而不是String...
來實現遞歸方法,並提供一個采用可變參數的便捷方法:
private Node getElementRec(Node currentNode, String... names) {
return getElementRec(currentNode, Arrays.asList(names));
}
private Node getElementRec(Node currentNode, List<String> names) {
if (null == names || names.isEmpty())
return currentNode;
else {
Node child = currentNode.getChildWithName(names.get(0));
return getElementRec(child, names.subList(1, names.length()-1));
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.