我的想法是,如果我在某个楼梯,我可以向下一步或两步,所以如果我在楼梯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));
}
}
在您的反馈后我得到一个空输出 import 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 :(得分:1)
ArrayList中的方法add(E e)
在将作为参数传递的元素true
附加到ArrayList的末尾时返回e
。
您的方法explore(int objHeight, ArrayList<Integer> Array)
不接受其第二个参数的布尔值。然而,在同一个方法explore
中,您递归调用explore
并将布尔值传递给方法。
应修改以下代码,首先调用add
的{{1}}方法,然后将Array
传递给Array
方法。
在:
explore
此代码将参数explore(objheight-2,Array.add(2));
和int
传递给boolean
方法,该方法不是它接受的参数。您应该尝试以下操作。
之后:
explore
此代码首先向Array.add(2);
explore(objheight-2,Array);
添加2,然后将Array
传递给Array
方法,而不调用explore
对象上的任何其他方法
您还需要为下一行代码执行此操作,其中包含Array
。
编辑:在进一步检查代码后,我发现了另一个(更快)错误。每次程序运行时都会发生NullPointerException:
explore(objheight-1,Array.add(1));
然后在ArrayList<Integer> Array = null;
explore (height,Array);
方法内部调用了explore
上的不同方法,尽管Array
始终为Array
:
null
,Array.toString();
和Array.add(2)
。
必须在Array.add(1)
或Array
方法内初始化staircase
对象。
explore
或ArrayList<Integer> Array = new ArrayList<Integer>();