从一个 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);
顺便说一句,我建议您不要在名称中包含变量类型,例如personsArrayList,marriedBoolean。您在声明时已经指定了类型
ArrayList<Person101> personsArrayList;
而只是说出他们的名字,已婚等
只是我的 2 美分 :)。
我目前正在 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);
顺便说一句,我建议您不要在名称中包含变量类型,例如personsArrayList,marriedBoolean。您在声明时已经指定了类型
ArrayList<Person101> personsArrayList;
而只是说出他们的名字,已婚等
只是我的 2 美分 :)。