首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >制作俄罗斯方块游戏时出现编译错误

制作俄罗斯方块游戏时出现编译错误
EN

Stack Overflow用户
提问于 2020-05-26 01:02:44
回答 1查看 88关注 0票数 0

我正在做一个俄罗斯方块游戏遵循这个http://zetcode.com/tutorials/javagamestutorial/tetris/教程在java中。我一直收到这个编译错误:

File: /Users/Adelaide/Documents/MyGame/src/Shape.java [line: (no source location)] File is in the wrong directory or is declared part of the wrong package. Directory name 'src' does not match package name 'zetcode'.

我试着移动它,创建名为"zetcode“的文件,但我不知道如何解决这个问题,你能帮我吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-05-26 13:02:21

在Java语言中,package语句定义类的名称空间。这里您正在遵循一个教程,它将指导您使用com.zetcode包。这很好,但是这个包还定义了您的文件必须驻留的目录结构。此处的图形对象必须位于此文件夹结构中:

src/com/zetcode/Shape.java

通过将Shape.java留在src/文件夹的根目录中,您表示该类没有包(或者更确切地说,它具有默认的未命名包),因此当编译器在源代码中看到package语句时,它会抛出您看到的错误。

解决方案

最简单的解决方案是将源文件移动到与其包语句匹配的文件夹结构中。想象一下,包名称中分隔单词的点是斜杠(路径分隔符)。创建src/com/zencode目录并将文件移动到该文件夹中。编译器应该更高兴一些。

有关包的更多详细信息

包名很重要,因为它们允许Java显式地知道正在使用哪个类。您可能有许多Shape类,只要它们位于不同的包中,但是当您使用包import一个特定的类时,编译器肯定知道要加载哪个类。

此外,您可能会注意到,包名通常以制造它的公司的网站域名的反向开头。例如,com.abcxyz将是以www.abcxyz.com作为其网站的公司的类的包名的开头。在你的代码中使用别人的包名是不好的,因为这意味着你所写的代码是由该公司或组织制作的。

您说过,当您删除或更改包语句时,您还会遇到其他错误。这可能是因为其他类(如Board.java)正在隐式导入Shape类,因为它们在同一个包中,如果您更改Shape的包名,编译器将无法找到它。您需要更改所有其他类的package语句以匹配新的包。把它想象成一个住在一个地址上的家庭。如果他们搬家了,他们都需要知道他们的新地址。这里的'family‘是属于一起的一组类(Shape、Board、Tetris在你的例子中),包名是它们的地址。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62007229

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档