【问题标题】:Java error: cannot find symbol from object arrayJava 错误:无法从对象数组中找到符号
【发布时间】:2012-12-30 22:33:00
【问题描述】:

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

我有两个文件,在 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 新手。为什么可能会发生此错误?

【问题讨论】:

    标签: java arrays object constructor


    【解决方案1】:

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

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

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

    应该变成:

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

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

    【讨论】:

    • 完美编译没有问题。此后,我在调试时将 double 更改为 int,但没有更改我的帖子。非常感谢。
    【解决方案2】:

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

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

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

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

    【讨论】:

      【解决方案3】:

      替换

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

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

      【讨论】:

        【解决方案4】:

        因为这行代码你得到了错误:

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

        这将起作用:

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

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

        SensorSim s; 
        s = new SensorSim(sensorNom, sensorErr);
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-08-20
          • 2013-01-31
          • 2013-05-20
          • 2013-12-06
          • 2016-07-22
          相关资源
          最近更新 更多