当前位置: 首页 > 知识库问答 >
问题:

Java设置器无法在数组对象上按预期工作

太叔何平
2023-03-14

我对Java还很陌生,想写一些代码来创建对象,显示(打印)和编辑它们。

>

  • 我写了一节课:

    公共类人员{

    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;
        }
    }
    

    }

    我在主类中创建了一个Person数组。(100个对象)。

    公共类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);
    

    根据相应的命令,用户可以在这个数组中创建一个对象(它是德语,但基本上是读名字、姓氏和出生日期)。mainCount用于跟踪创建对象的数组中的哪个位置:

    公共静态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");
    

    }

    现在实际的问题是:调用以下方法,用户应该能够通过使用用户输入和setter在数组中编辑所需的对象:

    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(ID).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已按要求更改。

    我错过了什么?

    非常感谢安德万斯!

  • 共有1个答案

    阴禄
    2023-03-14

    您永远不会更改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;
    }
    
     类似资料:
    • 问题内容: 我在Startup.cs中有以下代码,希望它能覆盖默认的序列化选项。我希望它覆盖整个ASP Net Core 2.0项目中的每个序列化,但是动作返回值不正确,我认为此全局属性在Core 2.0中不起作用 我把它写在app.UseMvc()之前的Configure中。 问题答案: 在ASP.NET Core中,当在中连接应用程序上的服务时进行配置。扩展名返回的流利扩展名。公开您可以在操作

    • 问题内容: 我正在使用RxJava和带有RxAndroid的Android应用程序。我正在使用mergeDelayError将两个复古拟合网络调用合并为一个可观察的对象,如果其中一个对象发出一个,则将处理发出的项目,而如果其中一个对象发出的则将处理错误。这是行不通的,并且仅在遇到任何错误时才触发onError操作。现在,为了测试这一点,我转到了一个非常简单的示例,当我进行onError调用时,仍然

    • 问题内容: 我正在使用selenium来抓取一些数据。 我单击的页面上有一个按钮,说“ custom_cols”。此按钮为我打开一个窗口,从中可以选择列。 此新窗口有时需要一些时间才能打开(大约5秒钟)。所以我已经使用了 延迟为20秒。但是有时它无法在新窗口中选择查找元素,即使该元素可见。在其余时间中,这种情况仅发生十次一次。 我在其他地方也使用了相同的功能(WebDriverWait),并且可以

    • 问题内容: 经过测试后,我只能对已经解析过的JSON数据返回一个肯定值。 根据官方文件: isValidJSONObject返回一个布尔值,该布尔值指示是否可以将给定对象转换为JSON数据。 但是,尽管事实是我尝试将其从JSON转换为NSDictionary的对象都可以正常转换,但仍会返回。 这是我的代码: 我的日志包含以下内容: 然后是dict的输出,这是一个巨大的NSMutableDictio

    • 问题内容: 考虑以下可以在任何程序执行之前预加载的库: 问题是,尽管总是调用全局变量的构造函数,但对于某些程序却不调用析构函数,例如: 对于其他一些程序,按预期方式调用析构函数: 您能解释一下为什么在第一种情况下不调用析构函数吗?编辑:上面的问题已得到解答,即程序可能会使用_exit(),abort()退出。 然而: 有没有办法在预加载的程序退出时强制调用给定函数? 问题答案: 具有作为其初始化代

    • 我必须将日期-时间字符串转换为分区日期-时间对象。我使用DateTimeForman读取模式。根据留档,模式中的“Z”可以接受以下格式: /-0000 但是“分区约会”。parse(myDate,formatter)只适用于第一种情况;相反,在第二种情况下,代码生成一个异常。 我用的是8Java 我做错什么了?谢谢!