在java中递增一个数字,直到达到100,然后连续递减到0

Ham*_*lik -1 java increment

我正在制作一个有守门员的游戏.我希望他永远来回走动.我有一个名为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语句完全错误的想法?

Roh*_*ain 5

这就是为什么你不应该做比较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变量.