[英]An equals() method that determines two Participants is not working
我究竟做错了什么?
问题是我将如何包含一个equals()
方法,如果两个Participant
在所有三个字段中都具有相同的值,该方法将确定两个Participant
相等? 包括一个为每个字段分配参数值的构造函数,以及一个返回包含所有值的String的toString()
方法。
import javax.swing.JOptionPane;
import java.util.*;
public class Abc {
private static Ab mini[] = new Ab[2];
private static Ab diving[] = new Ab[2];
public static void main(String[] args) {
String name = "";
String add = "";
int age = 0;
Ab p = new Ab(name, age, add);
Ab p1 = new Ab(name, age, add);
setParticipant();
setParticipant1();
displayDetail();
displayDetail1();
if (p == p1) {
System.out.println("equal");
} else {
System.out.println("not equal");
}
}
public static void setParticipant() {
for (int x = 0; x < mini.length; x++) {
System.out.println("Enter detail about participant1 " + (x + 1) + "...");
String name = getName();
String add = getAdd();
int age = getAge();
System.out.println();
mini[x] = new Ab(name, age, add);
//Create the object with the data you collected and put it into your array.
}
}
public static void setParticipant1() {
for (int y = 0; y < diving.length; y++) {
System.out.println("Enter Participant2 " + (y + 1) + "...");
String name = getName();
String add = getAdd();
int age = getAge();
System.out.println();
//mini[x] = new Ab(name, age, add);
//Create the object with the data you collected and put it into your array.
diving[y] = new Ab(name, age, add);
}
}
public static void displayDetail() {
// for (int y = 0; y < diving.length; y++) {
System.out.println("Name \tAge \tAddress");
for (int x = 0; x < mini.length; x++) {
System.out.println(mini[x].toString());
// System.out.println(diving[y].toString());
}
}
public static void displayDetail1() {
System.out.println("Name \tAge \tAddress");
for (int y = 0; y < diving.length; y++) {
System.out.println(diving[y].toString());
}
}
public static String getName() {
Scanner sc = new Scanner(System.in);
String name;
System.out.print(" Participant name: ");
return name = sc.next();
}
// System.out.print(" Participant name: ");
// name = sc.next();
public static int getAge() {
int age;
System.out.print(" Enter age ");
Scanner sc = new Scanner(System.in);
return age = sc.nextInt();
}
public static String getAdd() {
String add;
Scanner sc = new Scanner(System.in);
System.out.print("Enter Address: ");
return add = sc.next();
}
}
public class Ab {
private String name;
private int age;
private String address;
public Ab(String strName, int intAge, String strAddress) {
name = strName;
age = intAge;
address = strAddress;
}
@Override
public String toString() {
return name + " " + age + " " + address;
}
public boolean equals(Participant value) {
boolean result;
if (name.equals(name) && age == value.age && address.equals(address)) {
result = true;
} else {
result = false;
}
return result;
}
}
equals
应该覆盖Object
的equals
方法,这意味着它应该接受Object
作为参数。
更改
public boolean equals(Participant value)
至
@Override
public boolean equals(Object value)
哦,它并不能帮助你超越equals
,如果你不使用它。
更改
p==p1
至
p.equals(p1)
从您提供的代码来看,我在任何地方都看不到Participant类,这意味着public boolean equals(Participant value)
开始, public boolean equals(Participant value)
将不起作用。 我建议您的equals方法看起来更像这样:
public boolean equals(Ab value) {
if (this.name.equals(value.name) && this.age == value.age && this.address.equals(value.address)){
return true;
}
else{
return false;
}
}
我还对您的Abc类进行了一些修订,以供您考虑。 在我看来,它看起来比原始代码更干净,更流畅,但这仍然是您的选择:)
import javax.swing.JOptionPane;
import java.util.*;
public class Abc {
private static Ab mini[] = new Ab[2];
private static Ab diving[] = new Ab[2];
public static void main(String[] args) {
String name = "";
String add = "";
int age = 0;
Ab p = new Ab(name, age, add);
Ab p1 = new Ab(name, age, add);
for(int x=0; x<mini.length; x++){
System.out.println("Enter detail about participant " + (x + 1) + "...");
setParticipant(mini[x]);
}
for (int y = 0; y < diving.length; y++) {
System.out.println("Enter detail about participant " + (y + 1) + "...");
setParticipant(diving[y]);
}
displayDetail(mini);
displayDetail(diving);
if (p.equals(p1)) {
System.out.println("equal");
} else {
System.out.println("not equal");
}
}
public static void setParticipant(Ab part) {
Scanner sc = new Scanner(System.in);
System.out.print("Name: ");
String name = sc.next();
System.out.print("Age: ");
int age = sc.nextInt();
System.out.print("Address: ");
String add = sc.next();
System.out.println();
part = new Ab(name, age, add); //<--- Create the object with the data you collected and put it into your array.
sc.close();
}
public static void displayDetail(Ab[] parts) {
System.out.println("Name \tAge \tAddress");
for (int x = 0; x < parts.length; x++) {
System.out.println(parts[x].toString());
}
}
}
尝试使用value.name.equals(name)和value.address.equals(address),因为现在您正在比较同一件事
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.