错误:当一切正常时,无法找到带有Javac的符号
我正在用java编写一个非常基本的程序,但是我得到一个错误“error:cannotfindsymber” 这让我发疯,因为我真的不知道这次我做错了什么 这是主类的代码错误:当一切正常时,无法找到带有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
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编码。我强烈建议你遵循标准的目录结构,而不是在主要源代码下嵌套测试,以及