如何更改此方法以返回ArrayList

时间:2014-07-04 18:21:09

标签: java arraylist return-value

从下面可以看出,我已多次尝试返回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;

    }

2 个答案:

答案 0 :(得分:0)

如果您希望combine返回一个ArrayList,只需定义它而不是void

public static ArrayList<String> combine(ArrayList<String> arr, int k, int startId, String[] branch, int numElem) {

我假设AddedNotesArrayList<String>,然后将其返回:

    System.out.println(AddedNotes);
    return AddedNotes;

注意:您还需要在方法结束时返回一个数组(AddedNotes,另一个数组或null),因为需要返回。因此要么在那里添加另一个返回(在循环之外),要么返回另一个数组或null。

您没有提供足够的详细信息,因此请允许我提供一些建议,以防万一:

  1. 你没有练习防御性编程(http://en.wikipedia.org/wiki/Defensive_programming)。特别是对于此代码,返回AddedNotes将允许外部程序修改它。除非你想要它被修改。即使在这种情况下,允许通过方法完成修改更有意义,而不是直接通过ArrayList。

  2. 您对static的使用是值得怀疑的,因为AddedNotes可能未初始化。

  3. 但总的来说,尝试更多地了解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