Краткая история
Я создал программу ниже. Я хочу импортировать пакет, который я создал в программу. Я не могу понять, почему компилятор не распознает мою адресную переменную, класс которой находится в файле под созданным мной пакетом
адрес, имя и дата имеют общий синтаксис, но компилятор не распознает адрес. После удаления адреса и выполнения программы с оставшимися классами я могу успешно запустить свою программу. Однако я не могу сделать это с адресом.
Дальнейшие подробности
Я создал программу, которая побуждает пользователя вводить число сотрудников, которых он или она хочет создать, через командную строку. Затем пользователь вводит информацию о имени сотрудника, добавлении и дате найма, и программа отображает эту информацию.
Код ниже НЕ СОДЕРЖИТ классы для имени, адреса и даты, хотя я упоминал объекты (а затем поля) в этих упомянутых классах. Эти классы были сохранены в других файлах в одной папке, потому что я пытаюсь запустить свой код в виде пакета.
Имя папки используется - следовательно, имя пакета используется. Каждый исходный код начинается с package util;
import util.*;
public class EmployeeA
{
Name name;
Date date;
Address address;
public EmployeeA()
{
name = new Name();
date = new Date();
address = new Address();
}
public static void main(String[] args)
{
int x = Integer.parseInt(args[0]);
EmployeeA[] array = new EmployeeA[x];
for(int i = 0; i < x; i++)
{
array[i] = new EmployeeA();
array[i].name.name = Input.getString("Enter employee first name and last name");
array[i].date.date = Input.getString("Enter employee hire date in MM/DD/YYYY");
array[i].address.address = Input.getString("Enter employee address");
}
for(int i = 0; i < x; i++)
System.out.println(array[i].name.name + " was hired on " + array[i].date.date + " and lives on "
+ array[i].address.address);
}
}
}
исходный файл # 1
package util;
public class Address
{
String address;
}
исходный файл # 2
package util;
public class Date
{
String date ;
}
исходный файл №3
package util;
public class Name
{
String name ;
}
employeeA.java:27: ошибка: не удается найти символ
array [i].address.address = Input.getString("Enter employee address");
^
символ: переменная адрес местоположение: переменный адрес типа Адрес
employeeA.java:31: ошибка: не удается найти символ
System.out.println (array[i].name.name + " was hired on " + array[i].date.date + " and lives on " + array[i].address.address);
^
символ: переменная адрес местоположение: переменный адрес типа Адрес
Ваш address
поле в Address
не имеет модификаторов доступа - поэтому он доступен только для классов в одном пакете. Класс EmployeeA
не находится в одном пакете (он не имеет оператора package
), поэтому он не может его увидеть. Вы можете сделать это общедоступным - но было бы лучше сделать его приватным и добавить метод доступа к нему (getAddress()
). Дополнительную информацию см. В руководстве по Java.
Сказав это, ваши существующие типы в настоящее время довольно анемичны - и, конечно, есть лучшие типы для представления даты, чем String
...
Package
. Хорошо поймал.
util
. Внимательно глядя на свой код, employeeA
нет. Хорошо поймал.
похоже, что в конце класса EmployeeA у вас есть еще одна закрытая фигурная скобка. Непосредственно под знаком плюса на последней строке. Я подозреваю, что это заставляет его не компилироваться должным образом.