从一个 class 返回到另一个 class 的方法

Method returning from one class to another class

我目前正在 Java 学习 OOP,我尝试编写一个小型数据库系统,一切正常,但我有两个方法位于 class CivilStatus 效果不佳,他们一直给我 0 作为 return,方法是 PersonAge(String NationalId)CountSingle()。如果有人能为我解决这个错误,我将不胜感激。

public class Person101 {
    String nationalIdString;
    String nameString;
    int Age;
    Boolean marriedBoolean;

    Person101(String newId, String name, Boolean newMarried) {
        nationalIdString = newId;
        nameString = name;
        marriedBoolean = newMarried;
        Age = 0;

    }

    public String getId() {

        return nationalIdString;
    }

    public String getName() {

        return nameString;
    }

    public int getAge() {

        return Age;
    }

    public Boolean getMarriedStatus() {

        return marriedBoolean;
    }

    public void setAge(int newAge) {
        Age = newAge;

    }

    public void setName(String newName) {
        nameString = newName;

    }

    public void print() {
        System.out.println("The name is: " + nameString + " ,Id is: " + nationalIdString);

    }

    public boolean SingleJordanian() {
        if ((nationalIdString.contains("Jor")) && (marriedBoolean == false)) {
            return true;
        } else {
            return false;
        }

    }
public void birthday() {
        Age++;
    }

}

import java.util.ArrayList;

public class CivilStatus1 {
    String nameString;
    ArrayList<Person101> personsArrayList;

    CivilStatus1(String newName) {
        nameString = newName;
        personsArrayList = new ArrayList<Person101>();

    }

    public String getName() {

        return nameString;
    }

    public ArrayList<Person101> getPerson101s() {

        return personsArrayList;
    }

    public int PersonAge(String NationalId) {
        int newAge = 0;
        for (Person101 person101 : personsArrayList) {
            if (person101.nationalIdString.equals(NationalId)) {
                newAge = person101.Age;

            } else {

            }
        }
        return newAge;

    }

    public int CountSingle() {
        int counter = 0;
        for (Person101 person101 : personsArrayList) {
            if (person101.SingleJordanian()) {
                counter = counter + 1;

            } else {

            }
        }
        return counter;
    }
}

提前致谢!

有几件事可能会导致问题。

首先使用每个 class 的变量,最好指定它们是否 public

public String nationalIdString;
public String nameString;
public int Age;
public Boolean marriedBoolean;

或私人。

private String nationalIdString;
private String nameString;
private int Age;
private Boolean marriedBoolean;

否则变量是包保护的,这可能会导致访问变量时出现问题。 如果将它们设置为私有,则可以使用 getter 方法

访问它们
public String getNationalIdString(){
    return nationalIdString;
}

如果您使用的是 getters,您的方法应该如下所示

    public int PersonAge(String NationalId) {
    int newAge = 0;
    for (Person101 person101 : personsArrayList) {
        if (person101.getNationalIdString().equals(NationalId)) {
            newAge = person101.getAge();

        } else {

        }
    }
    return newAge;

}

我不确定这是否是导致问题的原因,但它可能是。 另一个建议是使用布尔值而不是布尔值,除非有特定的原因使用它。

为了帮助调试您的代码,我建议您这样做

    public int PersonAge(String NationalId) {
    int newAge = 0;
    for (Person101 person101 : personsArrayList) {
        System.out.println("Looking for: " + NationalID + " current person: " + person101.NationalID);
        if (person101.nationalIdString.equals(NationalId)) {
            newAge = person101.Age;
        }
    }
    return newAge;

}

这应该可以帮助您定位问题,您也可以添加此人的姓名,以便将其与您输入的数据进行比较。我还删除了 if 语句的 else 分支,因为它没有被使用。

还要检查 SingleJordanian() 是否按预期工作,因为这可能是 CountSingle() 的根未按预期工作。

这两种方法的问题是一样的。写作

personsArrayList = new ArrayList<Person101>();

创建了一个 ArrayList,但它是空的,因为您还没有向其中添加任何项目。然后,当您尝试遍历 ArrayList

for (Person101 person101 : personsArrayList) {
    if (person101.nationalIdString.equals(NationalId)) {
        newAge = person101.Age;

    } else {

    }
}

它甚至没有进入循环,因为没有什么可循环的。

您应该首先将一些项目添加到循环中,例如:

Person101 person1 = new Person101();
personsArrayList.add(person1);

顺便说一句,我建议您不要在名称中包含变量类型,例如personsArrayListmarriedBoolean。您在声明时已经指定了类型

ArrayList<Person101> personsArrayList;

而只是说出他们的名字,已婚等

只是我的 2 美分 :)。