我正在为College写一个课程,它所要做的就是在前一个和中间存储一个名字。它还必须有一些方法,其中一个是“public boolean equals(Name otherName)”
这是我到目前为止所拥有的
public class Name
{
private String FirstNM, MiddleNM, LastNM,Name, otherName;
public Name(String first, String middle, String last)
{
FirstNM = first;
MiddleNM = middle;
LastNM = last;
Name = first+middle+last;
}
public String toString()
{
return (FirstNM+", "+MiddleNM+", "+LastNM);
}
public String getFirst()
{
return FirstNM;
}
public String getMiddle()
{
return MiddleNM;
}
public String getLast()
{
return LastNM;
}
public String firstMiddleLast()
{
return (FirstNM+", "+MiddleNM+", "+LastNM);
}
public String lastFirstMiddle()
{
return (LastNM+", "+FirstNM+", "+MiddleNM);
}
public boolean equals(Name otherName)
{
if (otherName.equalsIgnoreCase(Name))
{
return true;
}
}
我遇到了将一个Name对象与另一个Name对象进行比较的问题。这个问题希望我使用equalsIgnoreCase方法。我似乎无法让这个工作。我做错了什么?我能做些什么不同
编辑:让我澄清一下书中的确切问题
·public Name(String first,String middle,String last)-constructor。名称应存放在给定的情况下;不要转换为所有大写或小写。
·public String getFirst() - 返回名字
·public String getMiddle() - 返回中间名
·public String getLast() - 返回姓氏
·public String firstMiddleLast() - 按顺序返回包含人名全名的字符串,例如“Mary Jane Smith”。
·public String lastFirstMiddle() - 返回一个字符串,其中包含姓氏的全名,姓氏首先后跟一个逗号,例如“Smith,Mary Jane”。
·public boolean equals(Name otherName) - 如果此名称与otherName相同,则返回true。比较不应区分大小写。 (提示:有一个String方法equalsIgnoreCase就像String方法一样,除了在进行比较时没有考虑大小写。)
答案 0 :(得分:2)
您希望在equals
方法中执行的操作是比较班级中的所有重要变量。为了帮助您入门:
public boolean equals(Name otherName) {
return (this.firstNm.equalsIgnoreCase(otherName.firstNm) && /* rest of variables to compare */)
}
从技术上讲,这应该是Object
并投下它,但如果你的老师说要接受Name
那么我就是这样做的。
覆盖equals应该看起来更像这样:
public boolean equals(Object other) {
if (other == null || ! other instanceof Name) return false;
Name otherName = (Name) other;
return (this.firstNm.equalsIgnoreCase(otherName.firstNm) && /* rest of variables to compare */)
}
答案 1 :(得分:1)
equalsIgnoreCase()
用于比较不用于比较对象的字符串。
为了比较对象,您需要正确覆盖equals方法。 equals()
会根据您需要的属性比较对象的相等性,并且必须hashCode()
才能在Collections
中正确使用对象。
这是java.lang.Object类
中equals的默认实现 public boolean equals(Object obj) {
return (this == obj);
}
答案 2 :(得分:1)
在比较或创建getName()方法时,只需使用具有全名的String,而不是Name。至少这样做:
public boolean equals(Name otherName)
{
String fullName = otherName.getFirst() + otherName.getMiddle() + otherName.getLast();
if (fullName.get.equalsIgnoreCase(this.Name))
{
return true;
}
return false;
}
答案 3 :(得分:0)
equalsIgnoreCase
是必须在String对象上调用的Java String方法。您正尝试在Name对象上调用此方法,该对象无法正常工作。您必须在Name类中调用帮助器方法以检索正确的String,然后调用equalsIgnoreCase
方法。
以下是一些方法,用于比较整个名称字符串和单独名称的3个部分。
public boolean equals(Name otherName)
{
return (otherName.getFirst().equalsIgnoreCase(Name.getFirst())
&& otherName.getMiddle().equalsIgnoreCase(Name.getMiddle())
&& otherName.getLast().equalsIgnoreCase(Name.getLast()));
}
此外,您可以使用您提供的字符串方法获得更清晰的代码。
public boolean equals(Name otherName)
{
return (otherName.toString().equalsIgnoreCase(Name.toString()));
}