Java 虚荣者用过,但eclipse说他们';你不是吗?

Java 虚荣者用过,但eclipse说他们';你不是吗?,java,variables,Java,Variables,我正在用Java做一些输入处理,我遇到了一些麻烦。我有两个变量(xMove和zMove),我在代码中使用了很多次,但是eclipse拒绝承认它们的使用。我有一种感觉,这是什么导致我的问题,所以请看一看,这样我就可以看到我做错了什么 public void tick(boolean forward, boolean back, boolean left, boolean right, boolean turnLeft, boolean turnRight) { double

我正在用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++;
        }

    }

因为你没有用它们!是的,你增加和减少它们,所以,是的,你认为这在某种意义上是变化的。那你怎么处理它们呢?您不会将它们分配给任何其他变量。您不能从方法返回它们。既然您已经增加/减少了它们,它们实际上会去哪里?不在哪里。事实上,你没有使用它们!:-)


尝试将它们分配给另一个变量。或者退回。或指定给类级别变量。对它们执行其他操作,这应该会清除。

尝试将变量存储在方法之外。然后,正如XWaveX所说,它们不会在每次调用该方法时被初始化为零。

考虑可观察到的行为:也就是说,您实际上可以从程序的“外部”以某种方式看到或测量行为。例如,
System.out.println(“hello”)
具有将
“hello”
打印到stdout的可观察行为。当然,有些行动不那么直接。鉴于此片段:

if (i < 0) {
    i++;
}
System.out.println(i);
vs,该代码的可观察结果是什么:

public void tick1(boolean up) {
    int i = 1;
    if (up) {
        i++;
    }
}
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
}

尽管最后一个变量具有不同的编译时行为(只需少一个参数),但实际上与前三个变量具有相同的运行时行为。

每次调用方法时,xMove和zMove都将初始化为零……您正在编辑它们,但不在任何地方读取它们的值。您在本地声明这些方法;因此,您声明的任何实例方法都会被隐藏。Eclipse也应该告诉您这一点。如果您不想返回它们的值,请将它们设置为全局值,如果它适合您的应用程序或您希望分别实现的目标。@Loreliers解决方案是要么使用它们的值,要么去掉它们。它们是干什么用的?