使用布尔方法编写我自己的名称问题类

时间:2014-11-27 04:19:48

标签: java class methods

我正在为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方法。我似乎无法让这个工作。我做错了什么?我能做些什么不同

编辑:让我澄清一下书中的确切问题

  1. 写一个类名称,用于存储人员的名字,中间名和姓氏,并提供以下方法:
  2. ·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方法一样,除了在进行比较时没有考虑大小写。)

4 个答案:

答案 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()));
}