错误:当一切正常时,无法找到带有Javac的符号

错误:当一切正常时,无法找到带有Javac的符号,java,Java,我正在用java编写一个非常基本的程序,但是我得到一个错误“error:cannotfindsymber” 这让我发疯,因为我真的不知道这次我做错了什么 这是主类的代码 package glaces.tests; import geometrie.Point ; import glaces.Iceberg2D; public class TestIceberg2D { public static void main (String[] args){ Iceberg

我正在用java编写一个非常基本的程序,但是我得到一个错误“error:cannotfindsymber”

这让我发疯,因为我真的不知道这次我做错了什么

这是主类的代码

package glaces.tests;
import geometrie.Point ;
import glaces.Iceberg2D; 

public class TestIceberg2D {

    public static void main (String[] args){

        Iceberg2D i1 = new Iceberg2D(new Point(2,3), new Point(6,7));
        Iceberg2D i2 = new Iceberg2D(new Point(3,7), new Point(5,9));

        Iceberg2D i3 = new Iceberg2D(i1,i2);
        System.out.println(i3.toString());

}
}

以下是Iceberg2D类:

package glaces;
import geometrie.Point;
import java.lang.Math;

/**
 * Un iceberg rectangulaire
 * @author Martine Gautier, Université de Lorraine
 */
public class Iceberg2D {

    private Point enBasAGauche ;
    private Point enHautADroite ;

    /**
     * Construction
     * @param g le coin en bas à gauche
     * @param d le coin en haut à droite
     * uniquement en coordonnées positives
     */
    public Iceberg2D(Point g, Point d) {
        this.enBasAGauche = g;
    this.enHautADroite = d;
    }

    /**
     * Construction par fusion de deux icebergs qui se touchent
     * @param i1 premier iceberg à fusionner
     * @param i2 deuxième iceberg à fusionner
     */
    public Iceberg2D(Iceberg2D i1, Iceberg2D i2) {
        
    this.enBasAGauche = new Point (Math.min(i1.coinEnBasAGauche().getAbscisse(),i2.coinEnBasAGauche().getAbscisse()),Math.min(i1.coinEnBasAGauche().getOrdonnee(),i2.coinEnBasAGauche().getOrdonnee()));
    

    this.enHautADroite = new Point (Math.max(i1.coinEnHautADroite().getAbscisse(),i2.coinEnHautADroite().getAbscisse()),Math.max(i1.coinEnHautADroite().getOrdonnee(),i2.coinEnHautADroite().getOrdonnee()));
}

    /**
     * Retourne le coin en bas à gauche
     * @return le coin en bas à gauche
     */
    public Point coinEnBasAGauche() {
        return this.enBasAGauche ;
    }

    /**
     * Retourne le coin en haut à droite
     * @return le coin en haut à droite
     */
    public Point coinEnHautADroite() {
        return this.enHautADroite ;
    }


    /**
     * Retourne la hauteur
     * @return hauteur
     */
    public double hauteur() {

        return Math.abs(enHautADroite.getOrdonnee()-enBasAGauche.getOrdonnee());
    }

    /**
     * Retourne la largeur
     * @return largeur
     */
    public double largeur() {
        return Math.abs(enHautADroite.getAbscisse()-enBasAGauche.getAbscisse());
    }

    /**
     * Retourne la surface totale
     * @return surface totale
     */
    public double surface() {
        return hauteur()*largeur() ;
    }

    /**
     * Retourne vrai si il y a une collision entre les deux icebergs
     * @param i iceberg potentiellement en collision
     * @return vrai si collision entre les deux icebergs
     */
    public boolean collision(Iceberg2D i) {

    

    if(this.enBasAGauche.getAbscisse() + largeur() == i.enBasAGauche.getAbscisse() || i.enBasAGauche.getAbscisse() + i.largeur() == this.enBasAGauche.getAbscisse()){
        
        if(this.enBasAGauche.getOrdonnee() + hauteur() >= i.coinEnBasAGauche().getOrdonnee() && i.enBasAGauche.getOrdonnee() + i.hauteur() >= this.coinEnBasAGauche().getOrdonnee()){
            return true;
        }}
     
    if(this.enBasAGauche.getOrdonnee() + hauteur() == i.enBasAGauche.getOrdonnee() || i.enBasAGauche.getOrdonnee() + i.hauteur() == this.enBasAGauche.getOrdonnee()){
        
        if(this.enBasAGauche.getAbscisse() + largeur() >= i.coinEnBasAGauche().getAbscisse() && i.enBasAGauche.getAbscisse() + i.largeur() >= this.coinEnBasAGauche().getAbscisse()){
            return true;
        }   
}           
        
    
        return false ;
    }

    /**
     * Retourne vrai si this est plus volumineux que i
     * @param i iceberg à comparer
     * @return vrai si this est plus volumineux que i
     */
    public boolean estPlusGrosQue(Iceberg2D i) {
    
        return this.surface() > i.surface();
    }

    public String toString() {
        return "Point bas gauche : "+enBasAGauche.toString()+" / Point haut droite : "+enHautADroite.toString() ;
    }

    /**
     * Retourne le point au centre
     * @return le point au centre de l'iceberg
     */
    public Point centre() {

    return new Point((enBasAGauche.getAbscisse()+enHautADroite.getAbscisse())/2,(enBasAGauche.getOrdonnee()         +enHautADroite.getOrdonnee())/2);
    }

    /**
     * Réduction dans les quatre directions ; le centre ne bouge pas
     * @param fr dans ]0..1[ facteur de réduction
     */
    public void fondre(double fr) {
        fr = fr/2;
    double hauteur = hauteur();
    double largeur = largeur();
    enBasAGauche.deplacer(largeur*fr,hauteur*fr);
    enHautADroite.deplacer(-largeur*fr,-hauteur*fr);
    }

    /**
     * Casser une partie à droite
     * @param fr dans ]0..1[ facteur de réduction
     */
    public void casserDroite(double fr) {
    fr = fr/2;
        enHautADroite.deplacer(-largeur()*fr,0);
    }

    /**
     * Casser une partie à gauche
     * @param fr dans ]0..1[ facteur de réduction
     */
    public void casserGauche(double fr) {
        fr = fr/2;
    enBasAGauche.deplacer(largeur()*fr,0); 
    }

    /**
     * Casser une partie en haut
     * @param fr dans ]0..1[ facteur de réduction
     */
    public void casserHaut(double fr) {
    fr = fr/2;
        enHautADroite.deplacer(0,-hauteur()*fr); 
    }

    /**
     * Casser une partie en bas
     * @param fr dans ]0..1[ : définit le pourcentage supprimé
     */
    public void casserBas(double fr) {
        fr = fr/2;
    enBasAGauche.deplacer(0,hauteur()*fr);
    }

}

以下是我得到的错误:

javac -classpath ../ressourcesBPO/geometrie.jar -encoding "iso-8859-1" glaces/tests/TestIceberg2D.java
glaces/tests/TestIceberg2D.java:3: error: cannot find symbol
import glaces.Iceberg2D; 
             ^
  symbol:   class Iceberg2D
  location: package glaces
glaces/tests/TestIceberg2D.java:9: error: cannot find symbol
        Iceberg2D i1 = new Iceberg2D(new Point(2,3), new Point(6,7));
        ^
  symbol:   class Iceberg2D
  location: class TestIceberg2D
glaces/tests/TestIceberg2D.java:9: error: cannot find symbol
        Iceberg2D i1 = new Iceberg2D(new Point(2,3), new Point(6,7));
                           ^
  symbol:   class Iceberg2D
  location: class TestIceberg2D
glaces/tests/TestIceberg2D.java:10: error: cannot find symbol
        Iceberg2D i2 = new Iceberg2D(new Point(3,7), new Point(5,9));
        ^
  symbol:   class Iceberg2D
  location: class TestIceberg2D
glaces/tests/TestIceberg2D.java:10: error: cannot find symbol
        Iceberg2D i2 = new Iceberg2D(new Point(3,7), new Point(5,9));
                           ^
  symbol:   class Iceberg2D
  location: class TestIceberg2D
glaces/tests/TestIceberg2D.java:58: error: cannot find symbol
        Iceberg2D i3 = new Iceberg2D(i1,i2);
        ^
  symbol:   class Iceberg2D
  location: class TestIceberg2D
glaces/tests/TestIceberg2D.java:58: error: cannot find symbol
        Iceberg2D i3 = new Iceberg2D(i1,i2);
                           ^
  symbol:   class Iceberg2D
  location: class TestIceberg2D
7 errors


提前感谢

好的,我找到了解决方案,但我完全不知道它为什么会起作用。 以下是我在终端中键入的内容:

javac-classpath../ressourcesBPO/geometrie.jar:-编码“iso-8859-1”glaces/tests/testicebergg2d.java

我补充道:。在.jar之后


为什么有效?我完全不知道,如果有人想解释,我将不胜感激。非常感谢你的帮助

好的,我找到了解决方案,但我完全不知道它为什么会起作用。 以下是我在终端中键入的内容:

javac-classpath../ressourcesBPO/geometrie.jar:-编码“iso-8859-1”glaces/tests/testicebergg2d.java

我补充道:。在.jar之后


为什么有效?我完全不知道,如果有人想解释,我将不胜感激。非常感谢你的帮助

由于您的测试使用的是
Iceberg2D
类,因此首先需要编译该类,然后将
javac
作为类路径的一部分指向它的位置,或者同时编译这两个源代码

根据您的目录结构,第一个是(假设您在顶级
java
目录中):

javac-cp../ressourcesBPO/geometrie.jar-d java/glaces/Iceberg2D.java
javac-cp../ressourcesBPO/geometrie.jar:-d java/glaces/test/testicebergg2d.java
关键是您需要将
*.class
文件的顶级路径添加到类路径中(即,Java将在其中搜索编译文件
glaces/Iceberg2d.class
),这就是当前目录(即

然而,这最终混合了编译文件和源文件,使得一切变得比必要的更复杂。一个更传统的Java项目结构应该有这样的轮廓:

projectname/
╰── build/
    ╰── classes/
        ├── main/
        ╰── test/
├── lib/
│   ╰── geometrie.jar
╰── src/
    ├── main/
    │   ╰── java/
    │       ╰── glaces/
    │           ╰── Iceberg2D.java
    ╰── test/
        ╰── java/
            ╰── glaces/
                ╰── TestIceberg2D.java
这在某种程度上简化了build命令,并防止了源代码树的混乱:

shopt extglob#需要Bash才能运行!
javac-d build/classes/main-cp lib/geometrie.jar src/main/java/***.java
javac-d build/classes/test-cp lib/geometrie.jar:build/classes/main src/test/java/***.java
此外,这也是现代Java构建系统使用的目录结构,例如。使用后者,您可以创建一个最小的构建配置(使用
gradleinit
),然后运行
gradletest
来构建整个主源代码树,即测试源代码树,然后运行测试


最后一点,我知道在法国的大学里“用法语”编程是非常普遍的(在那里,也是这样),但我强烈建议在编写代码时坚持使用英语。名称对于代码理解很重要,在使用其他库时混合使用不同的语言会使一切都变得混乱。这也意味着只有讲法语的人才能阅读或使用您的代码。这意味着提问(例如,在这里关于堆栈溢出)变得更加困难,但也意味着一旦你写了一些很酷的东西并想要分享它,你就无法有效地分发你的代码。

因为你的测试使用的是
Iceberg2D
类,您首先需要编译它,然后将
javac
作为类路径的一部分指向它的位置,或者同时编译这两个源代码

根据您的目录结构,第一个是(假设您在顶级
java
目录中):

javac-cp../ressourcesBPO/geometrie.jar-d java/glaces/Iceberg2D.java
javac-cp../ressourcesBPO/geometrie.jar:-d java/glaces/test/testicebergg2d.java
关键是您需要将
*.class
文件的顶级路径添加到类路径中(即,Java将在其中搜索编译文件
glaces/Iceberg2d.class
),这就是当前目录(即

然而,这最终混合了编译文件和源文件,使得一切变得比必要的更复杂。一个更传统的Java项目结构应该有这样的轮廓:

projectname/
╰── build/
    ╰── classes/
        ├── main/
        ╰── test/
├── lib/
│   ╰── geometrie.jar
╰── src/
    ├── main/
    │   ╰── java/
    │       ╰── glaces/
    │           ╰── Iceberg2D.java
    ╰── test/
        ╰── java/
            ╰── glaces/
                ╰── TestIceberg2D.java
这在某种程度上简化了build命令,并防止了源代码树的混乱:

shopt extglob#需要Bash才能运行!
javac-d build/classes/main-cp lib/geometrie.jar src/main/java/***.java
javac-d build/classes/test-cp lib/geometrie.jar:build/classes/main src/test/java/***.java
此外,这也是现代Java构建系统使用的目录结构,例如。使用后者,您可以创建一个最小的构建配置(使用
gradleinit
),然后运行
gradletest
来构建整个主源代码树,即测试源代码树,然后运行测试


最后一点,我知道在法国的大学里“用法语”编程是非常普遍的(在那里,也是这样),但我强烈建议在编写代码时坚持使用英语。名称对于代码理解很重要,在使用其他库时混合使用不同的语言会使一切都变得混乱。这也意味着只有讲法语的人才能阅读或使用您的代码。这意味着提问(例如,在这里关于堆栈溢出)变得更加困难,但也意味着一旦你写了一些很酷的东西并想要分享它,你就不能有效地分发你的代码。

你从哪里得到这个命令
javac-classpath../ressourcesBPO/geometric.jar-编码“iso-8859-1”glaces/tests/TestIceberg2D.java
?你在使用IDE吗?我自己在终端中写的,我现在不使用IDE编码。我强烈建议你遵循标准的目录结构,而不是在主要源代码下嵌套测试,以及