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

在java中递增一个数字,直到它达到100,然后连续递减到0,java,increment,Java,Increment,我正在做一场有守门员的比赛。我要他永远前后移动。我有一个整数叫做goalieposx(守门员在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 (go

我正在做一场有守门员的比赛。我要他永远前后移动。我有一个整数叫做goalieposx(守门员在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");
    }

}
但这也不起作用,它先打印1,然后打印2,以此类推,最多打印200,然后永远打印200。有人知道我怎么解决这个问题吗?if语句完全是错误的吗?

如果(forward=true)
不做你认为它做的事

在java中,
=
是赋值运算符,
=
是比较运算符。您对该语句所做的是说“如果将
forward
赋值为
true
”,它将
forward
设置为
true
,并始终
返回true

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


事实上,你不需要
else if
只需要
else
就好像
布尔值
不是
真的
它必须是
假的
这就是为什么你永远不应该对
if
while
for
中的
布尔类型进行比较的原因。您刚刚完成了
if
语句中的作业:

if(forward=true)  
上述
if
语句的计算结果总是
true
。问题是,它在
Java
中成功编译,就语法而言,这是正确的。编译器只检查
中表达式的类型,如果
的计算结果是否为
布尔值。确实如此,所以没关系

您需要进行比较:

if(forward==true)
。。但正如我所说,您不应该对
boolean
类型进行比较。因此,只需这样做:

if(forward)
那就足够了


在这两种情况下,如果
,您也不需要这些
。只需一个
就可以了。嗯,我根本不懂
布尔
变量的用法。看起来你不需要它。您可以将代码更改为:

if (goalieposx<200){
    // forward=true;
    goalieposx++;
    System.out.println("forward");
}
else {
    // forward=false; 
    goalieposx--;
    System.out.println("backwards");
}

if(goalieposx问题在于您是根据整数的值设置方向,而不是之前是否满足条件。请尝试以下操作:

//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");
    }

}

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

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

这将在位置上添加-10,然后添加-9等。

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

if (forward == true){
    // execute code
}
编辑1:

if (forward)

会简单得多。

首先,让我们检查一下您已经编写的内容:

if (goalieposx<200){
    forward=true;
}
else if (goalieposx>200){
    forward=false;
}

天哪,我真不敢相信。非常感谢,我已经试着让它工作了将近两个小时了!天哪,是的,我用了else if作为其他东西的测试,但忘了删除它。感谢+1的解释。@user2762277这是一个非常基本的概念,我建议在你开始使用之前先读一读Java文本的介绍如果你不知道真正基本的东西,你会花很多时间旋转你的轮子。这似乎不是更好。你在考虑一个正弦函数吗?它的代码少很多,而且容易阅读。这就是为什么它更好。这些是改进,但它只会转一次,不会从0转到200。This只是一个例子,很容易适应。OP不需要填鸭式输入。这根本不是问题所在。如果(前进)
,那么为什么不
if(前进==(1==1))
呢?@boristesspider-
如果((前进==true)==true)
呢?
if (goalieposx<200){
    forward=true;
}
else if (goalieposx>200){
    forward=false;
}
//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)