ошибка компиляции при создании игры тетрис - PullRequest
0 голосов
/ 25 мая 2020

Я делаю игру в тетрис, следуя этому 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», но я не знаю, как это исправить, вы можете мне помочь?

1 Ответ

0 голосов
/ 26 мая 2020

В Java оператор package определяет пространство имен вашего класса. Здесь вы следуете руководству, и в нем содержится инструкция по использованию пакета com.zetcode. Это нормально, но пакет также определяет структуру каталогов, в которой должны находиться ваши файлы. Здесь ваш объект Shape должен находиться в этой структуре папок:

src/com/zetcode/Shape.java

Оставив Shape.java в root вашей папки src/ вы говорите, что у класса нет пакета (или, скорее, у него есть безымянный пакет по умолчанию), поэтому, когда компилятор видит оператор package в исходном коде, он выдает ошибку, которая вы видите.

Решение

Простейшее решение - переместить исходные файлы в структуру папок, которая соответствует их пакетным инструкциям. Только представьте, что точки, разделяющие слова в имени пакета, являются косой чертой (разделителями путей). Создайте каталог src/com/zencode и переместите файлы в эту папку. Компилятор должен быть счастливее.

Подробнее о пакетах

Имена пакетов важны, потому что они позволяют Java явно знать, какой класс используется. У вас может быть много классов Shape, если они находятся в разных пакетах, но когда вы import конкретный класс c с его пакетом, компилятор точно знает, что загружать.

Также вы Вы можете заметить, что имена пакетов часто начинаются с обратной стороны домена веб-сайта компании-производителя. Например, com.abcxyz будет началом имени пакета для классов, которые компания использует www.abcxyz.com в качестве своего веб-сайта. Плохая идея использовать чужое имя пакета в вашем коде, потому что это подразумевает, что код, который вы пишете, создан этой компанией или организацией.

Вы сказали, что когда вы удалили или изменили инструкцию пакета, у вас были другие ошибки . Вероятно, это потому, что другие классы (например, Board. java) неявно импортируют класс Shape, потому что они находятся в одном пакете, и компилятор не может его найти, если вы измените имя пакета Shape. Вам нужно будет изменить операторы пакета для всех других классов, чтобы они соответствовали новому пакету. Думайте об этом как о семье, живущей по адресу. Если они переехали, им всем нужно знать свой новый адрес. Здесь «семья» - это набор классов, которые принадлежат друг другу (в вашем случае Shape, Board, Tetris), а имя пакета - это их адрес.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...