在java中递增一个数字,直到它达到100,然后连续递减到0
我正在做一场有守门员的比赛。我要他永远前后移动。我有一个整数叫做goalieposx(守门员在x轴上的位置),我希望它上升1直到达到200,然后下降1直到它的背部为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
//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)