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

时间:2013-10-06 18:34:13

标签: 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");
    }

}

这种方法被连续调用。它打印为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语句完全错误的想法?

6 个答案:

答案 0 :(得分:5)

这就是为什么你永远不应该对booleanifwhile中的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不是truefalse必须{{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");
    }

}