Меня попросили создать телефонную книгу персонала в виде массива, в котором будут храниться их имена и добавочный номер.Телефонная книга должна поддерживать несколько функций:
Добавление новых записей, которые будут вставлены в алфавитном порядке фамилии
Удаление записей по имени илиномер
Имя для поиска с указанным именем
Изменить номер
Печатать всю телефонную книгу
Так что ничего сложного, однако проблема, с которой я сталкиваюсь, связана с текстовым файлом и получением информации, правильно сохраненной в массиве (ах).В текстовом файле содержатся данные, разделенные вкладками в следующем формате:
Фамилия <- TAB -> Инициалы <- TAB -> Расширение
Я полагаю, насколько это назначениеВ заключение, меня просят сначала загрузить данные заполненного текстового файла в массивы программы, которые затем будут обрабатываться с использованием функций, которые я упоминал ранее.Они прямо заявили, что обратная запись в файл здесь не обязательна.
До сих пор я создал несколько классов, которые содержат общую информацию для каждого объекта, который будет использоваться в проекте (т. Е. Класс Entry, интерфейс Directory [требуется], класс ArrayDirectory, класс DirectoryFile).Я пытаюсь прочитать 3 различных элемента из текстового файла, а затем сохранить его в объекте Entry, для которого я создал конструктор.Я знаю, как я буду использовать методы, я просто не могу создать эту начальную ссылку между текстовым файлом и моим массивом, что означает, что я пока не могу прогрессировать вообще.Я пытался реализовать решения, найденные в Интернете, но это оказалось более запутанным.
Так как я сохраняю данные как пользовательский объект (Entry), я также столкнулся с проблемами здесь и в конечном итоге запутался.
Class Entry
public class Entry {
private String firstName = null;
private String surname = null;
private String extension = null;
public Entry(String firstName, String surname, String extension) {
super();
this.firstName = firstName;
this.surname = surname;
this.extension = extension;
}
...(getters and setters, toString)...
ArrayDirectory Class
public class ArrayDirectory implements Directory {
private final static int MAX_ENTRIES = 20;
private static Scanner input = new Scanner(System.in);
DirectoryFile file = new DirectoryFile("C:\\Users\\John\\Documents\\Phonebook.txt");
static List<Entry> phonebook = new ArrayList<>(MAX_ENTRIES);
public void addEntry() throws IOException {
// check if phone book is empty before loading entries
System.out.println(phonebook.isEmpty());
loadEntries(file.getFile());
System.out.println("Enter first name: ");
String fname = input.nextLine();
System.out.println("Enter second name: ");
String sname = input.nextLine();
System.out.println("Enter telephone extension: ");
String telephone = input.nextLine();
Entry entry = new Entry(fname, sname, telephone);
phonebook.add(entry);
System.out.println("Added staff member: \n" + fname + "\n" + sname + "\n" + telephone);
System.out.println(Arrays.toString(phonebook.toArray()));
}
public String loadEntries(File file) throws IOException {
String surname = null, fname = null, extension = null;
BufferedReader br = new BufferedReader(new FileReader(file));
try {
StringBuilder sb = new StringBuilder();
String line = br.readLine();
while (line != null) {
String arr[] = line.split("\\s+");
surname = arr[0];
fname = arr[1];
extension = arr[2];
Entry entry = new Entry(surname, fname, extension);
phonebook.add(entry);
line = br.readLine();
}
} finally {
br.close();
}
return null;
}
...(other methods for functionality, testing etc.)...
DirectoryFile Class
public class DirectoryFile {
private File file;
public DirectoryFile(String fileName) {
this.file = new File(fileName);
}
public DirectoryFile(File file) {
this.file = file;
}
public File getFile() {
return file;
}
У меня проблема в том, что при запуске метода loadEntries () он выдает исключение OutOfBoundsException и сообщает index 1 outграниц на длину 1 .Я думаю, что у меня тоже может быть неверная подпись для метода, но это меня больше смущает.Должен ли я передать в метод телефонную книгу ArrayList вместо возврата String?
Извините, это мой первый пост, когда я обращаюсь за помощью в Интернете, поэтому извиняюсь, если я повторился.