【问题标题】:Java "Cannot find symbol" againJava“找不到符号”再次
【发布时间】:2013-08-20 11:48:36
【问题描述】:

我得到了两个 java 文件(主类 (Practica1) 和另一个类 (Matriz2x2))。两者都在同一个文件夹中。 主类实例化了我获得的类,这就是“找不到符号”错误弹出的地方。 Matriz2x2 类编译。

我不会详细介绍每个类(方法等),所以简单来说,Matriz2x2 类是这样的:

package mx.unam.ciencias.icc;

public class Matriz2x2 {

    private double a;
    private double b;
    private double c;
    private double d;

    public Matriz2x2(double a, double b,
                     double c, double d) {
        this.a = a;
        this.b = b;
        this.c = c;
        this.d = d;
    }
}

这是主类:

package mx.unam.ciencias.icc;

import java.util.Random;

public class Practica1 {

public static void main(String[] args) {
    Random r = new Random();

    Matriz2x2 m = new Matriz2x2(r.nextDouble() * 100,
                                r.nextDouble() * 100,
                                r.nextDouble() * 100,
                                r.nextDouble() * 100);
    }   
}

这是发脾气:

jose@jose-ThinkPad-T420:~/practica1/src/mx/unam/ciencias/icc$ javac Practica1.java
Practica1.java:13: cannot find symbol
symbol  : class Matriz2x2
location: class mx.unam.ciencias.icc.Practica1
        Matriz2x2 m = new Matriz2x2(r.nextDouble() * 100,
        ^
Practica1.java:13: cannot find symbol
symbol  : class Matriz2x2
location: class mx.unam.ciencias.icc.Practica1
        Matriz2x2 m = new Matriz2x2(r.nextDouble() * 100,
                          ^
Practica1.java:17: cannot find symbol
symbol  : class Matriz2x2
location: class mx.unam.ciencias.icc.Practica1
        Matriz2x2 n = new Matriz2x2(r.nextDouble() * 100,
        ^
Practica1.java:17: cannot find symbol
symbol  : class Matriz2x2
location: class mx.unam.ciencias.icc.Practica1
        Matriz2x2 n = new Matriz2x2(r.nextDouble() * 100,
                          ^
Practica1.java:37: cannot find symbol
symbol  : class Matriz2x2
location: class mx.unam.ciencias.icc.Practica1
        Matriz2x2 i = m.inversa();
        ^
Practica1.java:43: cannot find symbol
symbol  : class Matriz2x2
location: class mx.unam.ciencias.icc.Practica1
            Matriz2x2 id = m.multiplica(i);
            ^
6 errors

正如您所见,还有其他关于我未包含在 Matriz2x2 示例中的方法的错误,但我没有,因为它们都是关于同一个问题,它只是找不到 Matriz2x2 类。 这可能很简单,但我只是没有看到他们可能在代码中写的任何错误(除了老师写的)所以我不明白为什么主类没有编译,一切似乎都是正确的。

【问题讨论】:

  • 这两个类是否已编译并存在于类路径中
  • 您使用的是eclipse还是其他IDE?尝试重新加载项目。

标签: java


【解决方案1】:

您需要从源层次结构的根目录调用javac

这样做:

 cd ~/practica1/src
 javac mx/unam/ciencias/icc/Practica1.java

这样,编译器就知道在哪里寻找 Matriz2x2.java 文件。

Java 要求目录结构反映包名称。因此,由于这些类位于 mx.unam.ciencias.icc 包中,编译器希望它们位于当前目录的 mx/unam/ciencias/icc 子目录中。但是通过将当前目录设置为子目录,您会混淆编译器。

更好的解决方案是编写构建脚本 (Ant) 或使用 IDE。

【讨论】:

  • @JoséCasillas:接受答案吧!
  • 抱歉,我该怎么做?
  • 投票计数下方应该有一个褪色的复选标记。点击它。
【解决方案2】:

在尝试编译 Practical 类之前,请确保首先编译了 Matriz2x2 类。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-08
    • 2014-02-07
    相关资源
    最近更新 更多