简体   繁体   English

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

[英]Method returning from one class to another class

I'm currently learning OOP in Java, I have tried to write a mini database system, everything works well but I have two methods which are located in class CivilStatus that are not working well and they keep giving me 0 as a return, the methods are PersonAge(String NationalId) and CountSingle() .我目前正在 Java 中学习 OOP,我曾尝试编写一个迷你数据库系统,一切正常,但我有两种方法位于 class CivilStatus中,但它们仍然无法正常工作,是PersonAge(String NationalId)CountSingle() I would be grateful if anyone would have solved this bug for me.如果有人能为我解决这个错误,我将不胜感激。

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

Thanks in advance!提前致谢!

There are a few things that could be causing issues.有几件事可能会导致问题。

Firstly with the variables of each class it is better practice to specify if they are public首先使用每个 class 的变量,最好指定它们是否是公共的

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

or private.或私人的。

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

Otherwise the variables are package protected which may causing issues with accessing the variables.否则,变量受 package 保护,这可能会导致访问变量出现问题。 If you set them to private you can access them using getter methods如果将它们设置为私有,则可以使用 getter 方法访问它们

public String getNationalIdString(){
    return nationalIdString;
}

If you are using getters your method should look something like this如果您使用的是 getter,您的方法应该看起来像这样

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

        } else {

        }
    }
    return newAge;

}

I'm not sure if this is causing the problem but it may be.我不确定这是否会导致问题,但可能是。 The other suggestion is using boolean instead of Boolean unless there is a specific reason why you are using it.另一个建议是使用 boolean 而不是 Boolean 除非有特定原因使用它。

To help debug your code I suggest doing something like this为了帮助调试你的代码,我建议做这样的事情

    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;

}

This should help you locate the problem, you can also add the person's name so you can compare that to the data you inputted.这应该可以帮助您定位问题,您还可以添加此人的姓名,以便您可以将其与您输入的数据进行比较。 I also removed the else branch of the if statement as it was not used.我还删除了 if 语句的 else 分支,因为它没有被使用。

Also check that SingleJordanian() is working as expected as that may be root of CountSingle() not working as intended.还要检查SingleJordanian()是否按预期工作,因为这可能是CountSingle()没有按预期工作的根。

The problem is the same for both methods.两种方法的问题都是一样的。 Writing写作

personsArrayList = new ArrayList<Person101>();

creates an ArrayList , but it's empty, as you have not added any items to it.创建一个ArrayList ,但它是空的,因为您没有向其中添加任何项目。 Then, when you try looping over the ArrayList然后,当您尝试遍历 ArrayList

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

    } else {

    }
}

It doesn't even enter the loop, as there is nothing to loop over.它甚至没有进入循环,因为没有什么可以循环的。

You should first add some items to the loop, for instance:您应该首先将一些项目添加到循环中,例如:

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

As an aside, I would suggest that you shouldn't include the variable types in the name, eg personsArrayList , marriedBoolean .顺便说一句,我建议您不要在名称中包含变量类型,例如peopleArrayListmarriedBoolean You already specified the type when you declared it您在声明时已经指定了类型

ArrayList<Person101> personsArrayList;

Rather just name them persons, married etc.而只是将他们命名为人,已婚等。

Just my 2 cents:).只是我的 2 美分:)。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM