我正在制作一个有守门员的游戏.我希望他永远来回走动.我有一个名为goalieposx的int(x轴上的守门员位置),我希望它上升1,直到它达到200,然后向下一直到它的后面为0并重复.我试过以下
//this bit isnt in the method, its outside as global varibale
boolean forward=true
//this bit is in a method which is continiouly called nonstop
if (goalieposx<200){
forward=true;
}
else if (goalieposx>200){
forward=false;
}
System.out.println(forward);
if(forward=true){
goalieposx++;
System.out.println("forward");
}
else if (forward=false){
goalieposx--;
System.out.println("backwards");
}
}
Run Code Online (Sandbox Code Playgroud)
这种方法被连续调用.它打印为true,直到达到200,然后打印为false.但是,它始终向前打印,从不向后打印.所以结论是:布尔值按预期变化,但第一个if总是被调用,它似乎忽略了条件
我也试过这个
if(forward = true){
if(goalieposx==200){
forward=false;
}
else{
goalieposx++;}
}
else{
if(goalieposx==0){
forward=true;
}
else{
goalieposx--;}
System.out.println(goalieposx);
}
Run Code Online (Sandbox Code Playgroud)
但这也不起作用,它打印1然后2等达200,然后永远打印200.谁知道我怎么解决这个问题?是一个if语句完全错误的想法?
这就是为什么你不应该做比较boolean的类型if,while,for,等等.您刚刚在if声明中完成了作业:
if(forward=true)
Run Code Online (Sandbox Code Playgroud)
以上if陈述将始终评估为true.这个问题是,这成功编译Java,因为语法方面它没关系.编译器只检查if求值中的表达式类型boolean.它确实如此,所以它没关系.
你需要做比较:
if(forward==true)
Run Code Online (Sandbox Code Playgroud)
..但正如我所说,你不应该对boolean类型进行比较.所以,只需这样做:
if(forward)
Run Code Online (Sandbox Code Playgroud)
就足够了.
else if在这两种情况下你也不需要那些.只是一个else会工作正常.好吧,我根本不了解boolean变量的使用.好像你不需要它.您可以将代码更改为:
if (goalieposx<200){
// forward=true;
goalieposx++;
System.out.println("forward");
}
else {
// forward=false;
goalieposx--;
System.out.println("backwards");
}
Run Code Online (Sandbox Code Playgroud)
您之前所做的是,boolean根据条件设置变量,并使用该boolean变量作为条件来执行另一个if-else块.好吧,无论你在第二个if-else块中执行什么,都可以简单地在原始if-else块中移动,而无需借助中间actor boolean变量.
| 归档时间: |
|
| 查看次数: |
3130 次 |
| 最近记录: |