从下面可以看出,我已多次尝试返回AddedNotes,但我不知道如何更改" VOID"。我总是得到错误。为什么呢?
public static void combine(ArrayList<String> arr, int k, int startId, String[] branch, int numElem) {
if (numElem == k) {
ArrayList<String> AddedNotes = new ArrayList<String>();
for(int i=0;i<branch.length;i++){
AddedNotes.add(branch[i]);
}
System.out.println(AddedNotes);
return;
}
for (int i = startId; i < arr.size(); ++i) {
branch[numElem++] = arr.get(i);
combine(arr, k, ++startId, branch, numElem);
--numElem;
}
}
大多数人告诉我这样做,但它不起作用,因为我还需要在方法的底部返回另一个ArrayList。但我只需要返回AddedNodes。
public static ArrayList<String> combine(ArrayList<String> arr, int k, int startId, String[] branch, int numElem) {
if (numElem == k) {
ArrayList<String> AddedNotes = new ArrayList<String>();
for(int i=0;i<branch.length;i++){
AddedNotes.add(branch[i]);
}
System.out.println(AddedNotes);
return AddedNotes;
}
for (int i = startId; i < arr.size(); ++i) {
branch[numElem++] = arr.get(i);
combine(arr, k, ++startId, branch, numElem);
--numElem;
}
答案 0 :(得分:0)
如果您希望combine
返回一个ArrayList,只需定义它而不是void
:
public static ArrayList<String> combine(ArrayList<String> arr, int k, int startId, String[] branch, int numElem) {
我假设AddedNotes
是ArrayList<String>
,然后将其返回:
System.out.println(AddedNotes);
return AddedNotes;
注意:您还需要在方法结束时返回一个数组(AddedNotes,另一个数组或null),因为需要返回。因此要么在那里添加另一个返回(在循环之外),要么返回另一个数组或null。
您没有提供足够的详细信息,因此请允许我提供一些建议,以防万一:
你没有练习防御性编程(http://en.wikipedia.org/wiki/Defensive_programming)。特别是对于此代码,返回AddedNotes将允许外部程序修改它。除非你想要它被修改。即使在这种情况下,允许通过方法完成修改更有意义,而不是直接通过ArrayList。
您对static的使用是值得怀疑的,因为AddedNotes可能未初始化。
但总的来说,尝试更多地了解Java。有在线的优秀教程,例如http://docs.oracle.com/javase/tutorial
答案 1 :(得分:0)
简单:
public static ArrayList<String> combine(...){
ArrayList<String> AddedNotes = new ArrayList<String>();
...
return AddedNotes;
}
是的,您需要在方法的最后返回ArrayList
。您拥有它的方式,如果您没有输入if
条件,则不会返回任何内容,这就是您收到错误的原因。另一种方法是返回null
。