Установщики Java не работают должным образом с объектом Array

Я новичок в Java и хочу написать код, который создает объекты, отображает (печатает) и редактирует их.

  1. Я написал класс:

    public class Person {

    protected String firstName;
    protected String lastName;
    protected String fullName;
    protected Date dob;
    protected int id;
    
    public Person(String firstName, String lastName, Date dob, int id) {
        this.firstName = firstName;
        this.lastName = lastName;
        this.dob = dob;
        this.fullName = this.firstName + " " + this.lastName;
        this.id = id;
    
    }
    
    public String getFirstName() {return this.firstName;}
    public String getLastName() {return this.lastName;}
    public String getFullName() {
        return this.fullName;
    }
    public Date getDob() {
        return this.dob;
    }
    public int getId() {
        return this.id;
    }
    
    public void printAll() {
        System.out.println(this.fullName);
        System.out.println(this.dob);
        System.out.println(this.id);
    }
    
    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }
    
    public void setLastName(String lastName) {
        this.lastName = lastName;
    }
    
    public void setDob(Date dob) {
        this.dob = dob;
    }
    
    public boolean containsFullName(String fullName) {
        if (this.fullName.equalsIgnoreCase(fullName)) {
            return true;
        } else {
            return false;
        }
    }
    public boolean containsId(int id) {
        if (this.id == id) {
            return true;
        } else {
            return false;
        }
    }
    

    }

  2. Я создал массив людей в основном классе. (100 объектов).

public class Main {

final static int MAX_NUMBER_PERSONS = 100;
static Person[] person = new Person[MAX_NUMBER_PERSONS];
static int mainCount = 0;
static Scanner scan = new Scanner(System.in);
  1. по соответствующей команде пользователь может создать объект в этом массиве (это немецкий язык, но в основном это его имя, фамилия и дата рождения). mainCount используется для отслеживания, в какой позиции в массиве создается объект:

    public static void createPerson () выбрасывает ParseException {

    Scanner scan = new Scanner(System.in);
    
    // Namen erfassen:
    System.out.println("Bitte den Vornamen der Person eingeben:");
    String firstName = scan.nextLine();
    System.out.println("Bitte den Nachnamen der Person eingeben:");
    String lastName = scan.nextLine();
    String fullName = firstName + " " + lastName;
    
    // DOB erfassen:
    System.out.println("Bitte Geburtsdatum von " + fullName + " eingeben (TT/MM/JJJJ):");
    String dob = scan.next();
    Date dobDate = new SimpleDateFormat("dd/MM/yyyy").parse(dob);
    
    int id = mainCount;
    
    person[mainCount] = new Person(firstName, lastName, dobDate, id);
    ++mainCount;
    System.out.println("Du hast Person Nummer " + mainCount + " erstellt");
    

    }

  2. ТЕПЕРЬ АКТУАЛЬНАЯ ПРОБЛЕМА: вызывая следующий метод, пользователь должен иметь возможность редактировать желаемый объект в массиве, используя пользовательский ввод и установщики:

    public static void editPerson () выбрасывает ParseException {Scanner scan = new Scanner (System.in); System.out.println ("Bitte die ID der zu bearbeitenden Person eingeben (zu finden über) ..."); int id = scan.nextInt (); scan.nextLine (); searchByIdReturn (идентификатор) .printAll ();

    System.out.println("Diese Person bearbeiten? Tippe <ja>, sonst zurück zum Menü.");
    if(scan.next().equalsIgnoreCase("ja")) {
        scan.nextLine();
        System.out.println("Vorname eingeben...");
        String firstName = scan.nextLine();
        searchByIdReturn(id).setFirstName(firstName);
        System.out.println("Nachname eingeben...");
        String lastName = scan.nextLine();
        searchByIdReturn(id).setLastName(lastName);
        System.out.println("Bitte Geburtsdatum eingeben (TT/MM/JJJJ):");
        String dob = scan.next();
        Date dobDate = new SimpleDateFormat("dd/MM/yyyy").parse(dob);
        searchByIdReturn(id).setDob(dobDate);
    }
    

    }

После метода я ищу объект. Имя и фамилия остаются без изменений. dob, однако, был изменен по мере необходимости.

Что мне не хватает?

Большое вам спасибо в andvance!


person Buddy    schedule 14.05.2020    source источник
comment
Какие ценности вы предоставили? Что возвращает searchById? Как вы скажете, что эта дата была изменена?   -  person Gibbs    schedule 14.05.2020
comment
Между прочим, ужасный класс Date был вытеснен несколько лет назад классами java.time. Для ваших целей используйте LocalDate.   -  person Basil Bourque    schedule 14.05.2020


Ответы (1)


Вы никогда не меняете fullName, на который, я полагаю, вы смотрите.

this.fullName = this.firstName + " " + this.lastName;

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

public String getFullName() {
    return this.firstName + " " + this.lastName;
}

BTW тесты уже являются логическими, так что вы пишете.

public boolean containsId(int id) {
    return this.id == id;
}
person Peter Lawrey    schedule 14.05.2020
comment
Потрясающе, это то, что мне не хватало. Спасибо за предложение, так лучше! - person Buddy; 14.05.2020