-1

我正在制作一个有守门员的游戏。我希望他永远来回移动。我有一个名为goalieposx 的int(x 轴上的守门员位置),我希望它上升1 直到达到200,然后下降1 直到它回到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 语句完全是错误的想法吗?

4

6 回答 6

5

这就是为什么你永远不应该对, , , 中的boolean类型进行比较。您刚刚完成了语句中的任务:ifwhileforif

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变量。

于 2013-10-06T18:37:16.940 回答
2

if(forward=true) 不做你做的事

在java=中是赋值运算符,==是比较运算符。您对该语句所做的就是说“如果分配forwardtrue”,它将设置forwardtrue并且总是return true

你的意思是if(forward)if(!forward)

实际上,您不需要else ifjust anelse就好像 the booleanis not trueit must be一样false

于 2013-10-06T18:37:16.160 回答
0

更好的方法是通过添加负数使其向左移动,并通过添加正数使其向右移动。这是使用循环执行此操作的示例:

    for(int i = -10; i < 100; i++) {
        xPosition += i;
    }

这会将 -10 然后 -9 等添加到该位置。

于 2013-10-06T18:42:30.677 回答
0

在您的 if 语句中,您需要放置两个等号来检查是否相等。

if (forward == true){
    // execute code
}

编辑1:

if (forward)

会简单得多。

于 2013-10-06T18:44:18.303 回答
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)
于 2013-10-06T18:47:18.757 回答
-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");
    }

}
于 2013-10-06T18:40:31.343 回答