我在Java中进行一些输入处理,我遇到了麻烦。我有两个变量(xMove和zMove),我已经多次在代码中使用它们,但eclipse拒绝承认它们的使用。我有一种感觉,这就是导致我出现问题的原因所以请看看我能看出我做错了什么
public void tick(boolean forward, boolean back, boolean left, boolean right, boolean turnLeft, boolean turnRight) {
double xMove = 0.0;
double zMove = 0.0;
if (forward) {
zMove++;
}
if (back) {
zMove--;
}
if (left) {
xMove++;
}
if (right) {
xMove--;
}
if (turnLeft) {
zMove++;
}
if (turnRight) {
zMove++;
}
}
答案 0 :(得分:6)
因为你没有使用它们!是的,你增加和减少它们,所以,是的,你认为这在某种意义上是变化的。但那你用它们做什么?您不会将它们分配给任何其他变量。您不从方法返回它们。他们现在在哪里实际上已经增加/减少了它们?没有。事实上,你并没有使用它们! : - )
尝试将它们分配给另一个变量。或者归还他们。或者分配一个类级变量。与他们做其他事情,这应该清理。
答案 1 :(得分:1)
根据可观察行为来思考:也就是说,您可以以某种方式从程序“外部”实际看到或衡量的行为。例如,System.out.println("hello")
具有将"hello"
打印到stdout的可观察行为。当然,有些行动不那么直接。鉴于此片段:
if (i < 0) {
i++;
}
System.out.println(i);
......行动i++
没有直接可观察到的结果。但是,如果您可以将程序置于i < 0
状态,则可以观察打印数字大于程序所具有的数字的结果,如果不是if
块的话
考虑到这一点,这段代码的可观察结果是什么:
public void tick1(boolean up) {
int i = 1;
if (up) {
i++;
}
}
vs,这段代码的可观察结果是什么:
public void tick2(boolean up) {
int i = 1;
}
正如您可能看到的,他们的可观察结果是相同的:没有任何变化。即使i
处于最大值且up
为true
,tick1
也不会抛出异常 - 它只会溢出i
,然后执行没有结果。
事实上,如果你有:
public void tick3(boolean up) {
// don't even declare i
}
......这第三种变体具有完全相同的可观察结果:仍未改变。
您的IDE正试图告诉您代码中可能存在以下两种情况之一:
您发布的代码基本上处于相同的情况。
现在,如果您将tick1
和tick2
简化为tick3
,那么您的IDE可能会告诉您up
未使用。考虑最后一个变体:
public void tick4() {
// don't take any arguments or do anything
}
即使最后一个变体具有不同的编译时行为(它需要少一个arg),实际上与前三个具有相同的运行时行为。
答案 2 :(得分:0)
尝试将变量存储在方法之外。然后,正如XWaveX所说,每次调用方法时,它们都不会被初始化为零。