我正在制作一个有守门员的游戏。我希望他永远来回走动。我有一个名为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");
}
}
这种方法被连续调用。它打印为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);
}
但这也不起作用,它打印1然后2等达200,然后永远打印200。谁知道我怎么解决这个问题?是一个if语句完全错误的想法?
答案 0 :(得分:5)
这就是为什么你永远不应该对boolean
,if
,while
中的for
类型进行比较。您刚刚在if
声明中完成了作业:
if(forward=true)
上述if
语句将始终评估为true
。这个问题是,这在Java
中成功编译,因为语法方面它没问题。编译器只检查if
中的表达式类型是否为boolean
。它确实如此,所以它没关系。
您需要进行比较:
if(forward==true)
..但正如我所说,你不应该对boolean
类型进行比较。所以,只需这样做:
if(forward)
就足够了。
在这两种情况下,您也不需要else if
。只需else
即可。好吧,我根本不理解使用boolean
变量。好像你不需要它。您可以将代码更改为:
if (goalieposx<200){
// forward=true;
goalieposx++;
System.out.println("forward");
}
else {
// forward=false;
goalieposx--;
System.out.println("backwards");
}
您之前所做的是,根据条件设置boolean
变量,并使用该boolean
变量作为执行另一个if-else
块的条件。好吧,无论你在第二个if-else
块中执行什么,都可以简单地移动到原始if-else
块中,而无需借助中间行为者boolean
变量。
答案 1 :(得分:2)
if(forward=true)
不会做你喜欢的事情。
在java =
中是赋值运算符,==
是比较运算符。您使用该声明所做的是说“如果将forward
分配给true
”,这会将forward
设置为true
并始终return true
。
您的意思是if(forward)
和if(!forward)
。
事实上,您else if
只需else
,而boolean
不是true
,false
必须{{1}}。
答案 2 :(得分:0)
更好的方法是通过添加减号使其向左移动,并通过添加正数使其向右移动。以下是使用循环执行此操作的示例:
for(int i = -10; i < 100; i++) {
xPosition += i;
}
这会在该位置添加-10然后-9等。
答案 3 :(得分:0)
在你的if语句中,你需要设置两个相同的符号来检查是否相等。
if (forward == true){
// execute code
}
编辑1:
if (forward)
会更简单。
答案 4 :(得分:0)
首先让我们来看看你已写的内容:
if (goalieposx<200){
forward=true;
}
else if (goalieposx>200){
forward=false;
}
这个代码首先出现的问题是,当“goalieposx”达到201时,它可能会将方向设置为false,在下一次调用中,它会将方向设置为true。
相反,尝试使用这个聪明的选择:
//This goes before the infinite loop method
counter = 0;
//Then in the infinite loop method
counter++;
if(counter > 100) {
counter = -100;
}
goalieposx = 100 + counter; //(this shifts counter from
// between -100 and 100 to 0 and 200)
答案 5 :(得分:-1)
问题是您是根据整数的值设置方向,而不是先前是否满足条件。试试这个:
//this bit is in a method which is continiouly called nonstop
if (forward && (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");
}
}