1

我环顾四周,试图通过重新编译我的其他类等来解决这个问题,但似乎没有任何效果。

我有两个文件,在 SensorDataDisplay.java 我有以下代码:

private SensorSim[] sensors;

...

public void runSimulation(double numberOfSensors)  {
  sensors = new SensorSim[numOfSensors];
  int i = 0;

  for(i = 0; i<numOfSensors; i++) {
    sensors[i].SensorSim(sensorNom, sensorErr);
  }
}

然后在同一个目录中,我将 SensorSim.java 编译成 SensorSim.class,构造函数如下。

public SensorSim(double n, double d) {
    if (probs == null)
      loadData();
    nominal = n; sd = d;
    rng = new Random();
    running = true;
}

当我刚刚创建一个 sensorSim 时,这是可行的。我最近添加了 sensorSims 数组,这是我收到此错误的时候:

$ javac SensorDataDisplay.java

SensorDataDisplay.java:44: cannot find symbol
symbol  : method SensorSim(double,double)
location: class SensorSim
      sensors[i].SensorSim(sensorNom, sensorErr);
            ^
1 error

环顾四周,我发现它可能与较旧的类文件有关,因此我删除并重新编译了其他文件(SensorSim.class)。我读到的另一个可能的原因是与范围有关,但对我来说看起来不错,但是我是 Java 新手。为什么可能会发生此错误?

4

4 回答 4

2

SensorSim(double, double)您尝试运行在SensorSim实例 ( ) 上调用的方法,sensors[i]此时该实例甚至不存在。

如果您的意思是SensorSim在每个数组元素上创建一个实例,

sensors[i].SensorSim(sensorNom, sensorErr);

应该变成:

sensors[i] = new SensorSim(sensorNom, sensorErr);

更重要的是,您的runSimulation()方法将 adouble作为参数并使用它来调整数组 ( sensors = new SensorSim[numOfSensors];) 的大小:这double将“向下转换”为 a int

于 2012-12-30T22:36:09.207 回答
1

您正在尝试调用这样的构造函数

sensors[i].SensorSim(sensorNom, sensorErr);

这不是你的做法。我怀疑你想要:

sensors[i] = new SensorSim(sensorNom, sensorErr);
于 2012-12-30T22:34:31.000 回答
1

代替

sensors[i].SensorSim(sensorNom, sensorErr);

sensors[i] = new SensorSim(sensorNom, sensorErr);
于 2012-12-30T22:35:13.887 回答
1

由于这行代码,您会收到错误消息:

sensors[i].SensorSim(sensorNom, sensorErr);

这将起作用,而不是:

sensors[i] = new SensorSim(sensorNom, sensorErr);

请记住,sensors[i] 就像拥有例如

SensorSim s; 
s = new SensorSim(sensorNom, sensorErr);
于 2012-12-30T22:37:12.783 回答