【发布时间】:2011-08-01 20:12:18
【问题描述】:
这是我的一个课程中的一段代码:
public void run() {
SomeClass[][] someClassArray = new SomeClass[6][];
someClassArray[0] = new SomeClass[1];
someClassArray[1] = new SomeClass[4];
someClassArray[2] = new SomeClass[16];
someClassArray[3] = new SomeClass[64];
someClassArray[4] = new SomeClass[256];
someClassArray[5] = new SomeClass[1024];
someFunction(0,0);
}
someFunction(int i, int j) {
if(i == 5) {
someClassArray[i][j].flag = test(i,j); // BASE CASE
}
else {
if(someFunction(someClassArray(i+1,j*4))
&& someFunction(someClassArray(i+1,j*4+1))
&& someFunction(someClassArray(i+1,j*4+2))
&& someFunction(someClassArray(i+1,j*4+3)))
someClassArray[i][j].flag = true;
else
someClassArray[i][j].flag = false;
}
return someClassArray[i][j].flag;
}
class SomeClass {
boolean flag;
// other stuff
}
boolean test(int i, int j) {
// test some property of this coordinate
}
基本上我想要的是仅当下一个数组级别中的四个相应对象的标志也为真时,才将一个 SomeClass 对象的标志设置为真。不幸的是,我似乎遇到了问题:
if(someFunction(someClassArray(i+1,j*4))
&& someFunction(someClassArray(i+1,j*4+1))
&& someFunction(someClassArray(i+1,j*4+2))
&& someFunction(someClassArray(i+1,j*4+3)))
看起来它只检查第一个条件(我在计数器中添加了所以检查 someFunction 被调用了多少次,它只上升到 6,而不是我应该得到的 1365);您不能在 Java 中的 if 语句中执行多个函数调用吗?还是我做错了?
(顺便说一下格式,这是我第一次在这里发帖)
【问题讨论】:
-
欢迎来到网络上最好的编程相关论坛 :)
-
someFunction(someClassArray[i+1][j*4]) 与函数签名不匹配
-
糟糕,我在复制时搞砸了;应该是现在。
标签: java recursion short-circuiting