2016-11-27 85 views
0

这个想法是,如果我在某个楼梯我可以走一步或两步,所以如果我在楼梯3我可以走下去1 1 1或2 1例如。我的代码应该打印所有的可能性。我得到的错误是我无法将add函数转换为数组(因为add方法是一个布尔值)。这个算法有什么问题?在递归算法中使用数组来寻找组合

public class Stairs { 

public static void staircase (int height ){ 

    ArrayList<Integer> Array = null; 
    explore (height,Array); 
} 
public static void explore(int objheight,ArrayList<Integer>Array){ 
    int intialheight = 0; 
    if (intialheight == objheight){ 
     Array.toString(); 
    } 
    else{ if (objheight > intialheight){ 
     explore(objheight-2,Array.add(2)); 
     explore(objheight-1,Array.add(1)); 
    } 
} 
您的意见我得到一个空的输出 进口java.lang.reflect.Array中后

; import java.util.ArrayList;

public class Stairs { 

public static void staircase (int height ){ 

    ArrayList<Integer> Array = new ArrayList<Integer>(); 
    explore (height,Array); 
} 
public static void explore(int objheight,ArrayList<Integer>Array){ 
    int intialheight = 0; 
    if (intialheight == objheight){ 
     Array.toString(); 
    } 
    else{ if (objheight > intialheight){ 
     Array.add(2); 
     explore(objheight-2,Array); 
     Array.add(1); 
     explore(objheight-1,Array); 
    } 
}} 
public static void main (String args[]){ 
staircase(3); 

    } 
} 
+0

什么是 “add函数转换为数组” 是什么意思?我很肯定你会得到一个NullPointerException。 – Henry

回答

1

方法add(E e)在ArrayList中追加时作为参数到ArrayList的端部传递的元素e返回true

您的方法explore(int objHeight, ArrayList<Integer> Array)不接受其第二个参数的布尔值。然而,在同样的方法中,explore,你递归调用explore并传入一个布尔值给方法。

应修改以下代码,以首先调用Arrayadd方法,然后将Array传递给explore方法。

之前:

explore(objheight-2,Array.add(2));该代码被传递参数intbooleanexplore方法,这不是它接受的参数。您应该尝试以下操作。

后:

Array.add(2); explore(objheight-2,Array);此代码首先增加了2至Array和随后将Arrayexplore方法而不调用Array对象上的任何其它方法。


您还需要为代码的下一行,在那里你有explore(objheight-1,Array.add(1));做到这一点。


编辑:在进一步检查代码后,我发现了另一个(更快)的错误。产生NullPointerException每个程序运行时间将发生:

ArrayList<Integer> Array = null; explore (height,Array);

然后explore方法内,上Array不同的方法被调用时,尽管Array始终是null

Array.toString();Array.add(2)Array.add(1)

Array对象必须在staircaseexplore方法中进行初始化。

ArrayList<Integer> Array = new ArrayList<Integer>();ArrayList<Integer> Array = null; Array = new ArrayList<Integer>();