Новичок в Java, учусь. Возникла проблема с удалением и поиском во время решения. Подскажите что делаю не так. Заранее большое спасибо.
import java.io.*;
import java.util.ArrayList;
import java.util.List;
public class Employee implements Serializable {
List<Employee> arrayEmployee = new ArrayList<>();
private String name;
private int age;
private int salary;
private String job;
public Employee(String name, int age, int salary, String job) {
this.name = name;
this.age = age;
this.salary = salary;
this.job = job;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
public int getSalary() {
return salary;
}
public String getJob() {
return job;
}
boolean writeToFile(Employee employee) {
Writer writer = null;
try {
writer = new FileWriter("Employee.txt", true);
for (Employee list : arrayEmployee) {
writer.write(String.valueOf(list) + "\n");
}
writer.flush();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (writer != null) {
try {
writer.close();
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
return false;
}
boolean save(Employee employee) {
arrayEmployee.add(employee);
writeToFile(employee);
return false;
}
boolean delete(Employee employee) {
arrayEmployee.remove(employee);
writeToFile(employee);
return false;
}
boolean getByName(String name) {
for (Employee list : arrayEmployee) {
if (list.equals(name)) {
System.out.println("You found an employee named " + name);
} else {
System.out.println("Not found");
}
}
return false;
}
@Override
public String toString() {
return "Employee{" +
"name='" + name + '\'' +
", age=" + age +
", salary=" + salary +
", job='" + job + '\'' +
'}';
}
}
И Main.
public class Main {
public static void main(String[] args) {
Employee employee1 = new Employee("Jack", 30, 10000, "IBM");
Employee employee2 = new Employee("John", 20, 7000, "Apple");
employee1.save(employee1);
employee2.save(employee2);
employee1.delete(employee1);
employee1.getByName("Jack");
}
}
Я бы сделал так (если правильно понял задачу):
public class Employee {
private String name;
private int age;
private int salary;
private String job;
public Employee(String name, int age, int salary, String job) {
this.name = name;
this.age = age;
this.salary = salary;
this.job = job;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
public int getSalary() {
return salary;
}
public String getJob() {
return job;
}
@Override
public String toString() {
return "Employee{" +
"name='" + name + '\'' +
", age=" + age +
", salary=" + salary +
", job='" + job + '\'' +
'}';
}
}
Main
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;
import java.util.ArrayList;
import java.util.List;
public class Main {
private static List<Employee> arrayEmployee = new ArrayList<>();
static boolean save(Employee employee) {
arrayEmployee.add(employee);
writeToFile(employee);
return false;
}
static boolean writeToFile(Employee employee) {
Writer writer = null;
try {
writer = new FileWriter("Employee.txt", true);
for (Employee list : arrayEmployee) {
writer.write(String.valueOf(list) + "\n");
}
writer.flush();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (writer != null) {
try {
writer.close();
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
return false;
}
static boolean delete(Employee employee) {
arrayEmployee.remove(employee);
writeToFile(employee);
return false;
}
static boolean getByName(String name) {
for (Employee employee : arrayEmployee) {
if (employee.getName().equals(name)) {
System.out.println("You found an employee named " + name);
} else {
System.out.println("Not found");
}
}
return false;
}
public static void main(String[] args) {
Employee employee1 = new Employee("Jack", 30, 10000, "IBM");
Employee employee2 = new Employee("John", 20, 7000, "Apple");
save(employee1);
save(employee2);
delete(employee1);
getByName("Jack");
}
}
1). Проблема с удалением у Вас из-за того, что Вы используете метод remove и ожидаете, что Java сама "угадает" какой именно элемент Вы пытаетесь удалить. Если посмотреть в исходный код метода remove класса ArrayList, то можно увидеть, что происходит обход внутреннего массива значений и для каждого из них вызывается сравнение методом equals с удаляемым (переданным в метод remove) объектом. Тут мы подходим к истокам ошибки. Метод equals в классe Object выполняет лишь сравнение по ссылке. Если Вы хотите, чтобы работа с коллекциями Ваших объектов происходила корректно, Вам необходимо в Вашем объекте переопределить метод equals, объяснив тем самым как правильно сравнивать Ваши объекты. Подробнее про это пишет Джошуа Блох в своей книге "Effective Java". Советую к прочтению, после того как изучите азы.
2) Проблема с поиском. Тут у Вас вперемешку непонимание работы метода equals с неверным кодом. Ваш метод getByName принимает строку name, т.е. предполагается искать работника по его name. Но Вы зачем-то сравниваете всего работника с переданным name. Вам нужно сравнивать employee.name c переданным name.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
У меня программа, которая должна делать все слова с большой буквыЯ написал версию, которая делает слова с заглавной после первого слова