编译.java文件时无法找到符号错误

美好的一天,我有两个类,Map和Field,在同一目录中。 我成功编译了Field.java但是当我编译Map.java时,我得到了这个:

Map.java:4: error: cannot find symbol private Field[][] gameMap; ^ symbol: class Field location: class Map Map.java:61: error: cannot find symbol public Field getFieldPosition(){ ^ symbol: class Field location: class Map Map.java:8: error: cannot find symbol gameMap = new Field[10][20]; ^ symbol: class Field location: class Map 3 errors 

以下是两个类的代码:

 public class Map { private Field[][] gameMap; private int row, col; private int rowPlayer, colPlayer; public Map(){//constructor gameMap = new Field[10][20]; for(row=0;row<10;row++){ for(col=0;col<20;col++){ gameMap[row][col].setFieldUntilled(); } } rowPlayer = 0; colPlayer = 0; gameMap[rowPlayer][colPlayer].setPlayerLoc(); } public Field getFieldPosition(){ return gameMap[rowPlayer][colPlayer]; } } 

并为Field.java(如有必要):

 public class Field { private int playerLoc; private char fieldType; public Field(){//constructor fieldType = 'u'; playerLoc = 0; } public void setFieldUntilled(){ fieldType = 'u'; } public void setFieldTilled(){ fieldType = 't'; } public void setPlayerLoc(){ playerLoc = 1; } public void removePlayerLoc(){ playerLoc = 0; } public int getPlayerLoc(){ return playerLoc; } } 

我分别编译了Field.java和Map.java:javac Field.java没有返回任何错误,但是javac Map.java返回了上面的错误。

我仍然不清楚你的问题究竟在哪里。 但我会告诉你成功的步骤。

提示:我现在描述的将有很多替代品。

我认为MapField源文件没有任何包声明和import语句。

您的项目文件系统中应该有一个单独的项目目录。 让我们将该目录命名为my-game 。 此外,您应该在其中有一个源目录。 我们把它命名为src 。 您应该将源文件放入该源目录中。 您的项目目录布局现在看起来像:

 my-game/ |-- src/ |-- Field.java |-- Map.java 

如果你想用一个简单的命令编译Map类,你应该在src目录中并调用:

 my-game/src> javac Map.java 

这将导致两个源文件都被编译。 生成的类文件也将放入该源目录中。

到现在为止还挺好。 最好在编译时进入项目目录:

 my-game> javac src/Map.java 

但是现在这将导致您描述的编译器错误(并且没有生成类文件),因为现在类Field被查找在错误的目录中。 您需要告诉编译器在哪里查找它们:

 my-game> javac -sourcepath src src/Map.java 

这导致与以前相同的结果。

现在更好的是分离源目录和目标目录。 首先在项目目录中创建一个名为bin目录,然后编译:

 my-game> javac -sourcepath src -d bin src/Map.java 

这将导致以下目录布局:

 my-game/ |-- src/ | |-- Field.java | |-- Map.java |-- bin/ |-- Field.class |-- Map.class 

如果您已成功完成最后一步,那么使用像Eclipse这样的IDE。 它具有这个项目目录布局,但您不会受到编译的确切命令行的困扰。

几乎毫无疑问,问题是您已设置CLASSPATH环境变量,并且您的值不包含当前目录“。”。 对于此问题有两种不同的简单修复:一种是删除环境变量,但这可能会破坏某些依赖于它的第三方软件的安装。 解决这个问题的第二种方法是使用-classpath参数作为编译行的一部分:

 javac -classpath . Map.java 

您似乎忘了在Map类中导入Field。