使用多态打印出字符串出现次数

时间:2017-03-07 03:56:34

标签: java

我无法弄清楚如何打印多少次" Dr"标题出现在我的测试程序中的数组对象中,因为它们包含多个字符串。使用equals类是解决这个问题的最佳方法吗?

注意:我正在使用继承和多态。

public class Person {

private String name;
private final static String DEFAULT_NAME = "N/A";

public Person() {
    this(DEFAULT_NAME);
}

public Person(String name) {
    this.name = name;
}

public void setName(String name) {
    this.name = name;
}

public String getName() {
    return name;
}

public String toString() {
    return "Name: " + name;
}

public boolean equals(Object obj) {
    if(obj instanceof Person) {
        Person otherPerson = (Person) obj;
        return name.equalsIgnoreCase(otherPerson.getName());
    } else {
        return false;
    }
}

}

人类:

public class TitledPerson extends Person { 

private String title;

public TitledPerson() {
}

public TitledPerson(String name, String title) {
    super(name);
    this.title = title;
}

public String getTitle() {
    return title;
}

public void setTitle(String title) {
    this.title = title;
}

@Override
public String toString() {
    String parentString = super.toString();
    parentString += ", " + title;
    return parentString;
}

@Override
public boolean equals(Object obj) {
    if(obj instanceof TitledPerson) {
        TitledPerson otherPers = (TitledPerson) obj;
        return super.equals(obj) && this.title.equalsIgnoreCase(otherPers.title);                               
    } else {
        return false;
    }
}

}

TitledPerson Class:

input[type=search]:focus {
  width: 130px;
  background-color: #fff;
  border-color: #6dcff6;
  -webkit-box-shadow: 0 0 5px rgba(109, 207, 246, .5);
  -moz-box-shadow: 0 0 5px rgba(109, 207, 246, .5);
  box-shadow: 0 0 5px rgba(109, 207, 246, .5);
}


/* placeholder */

input:-moz-placeholder {
  color: #999;
}

input::-webkit-input-placeholder {
  color: #999;
}


/* demo B */

#demo-b input[type=search] {
  width: 15px;
  padding-left: 10px;
  color: transparent;
  cursor: pointer;
}

#demo-b input[type=search]:hover {
  background-color: #fff;
}

#demo-b input[type=search]:focus {
  width: 130px;
  padding-left: 32px;
  color: #000;
  background-color: #fff;
  cursor: auto;
}

#demo-b input:-moz-placeholder {
  color: transparent;
}

#demo-b input::-webkit-input-placeholder {
  color: transparent;
}

3 个答案:

答案 0 :(得分:1)

在与getTitle关键字进行比较时,更改为使用TitledPerson课程中的search

if(((TitledPerson)persons[i]).getTitle().equals(search)) {
        counter++;      
}

答案 1 :(得分:0)

equals中的TitledPerson方法会调用超类equals,这会导致名称和标题在相等方面必须相同。

我认为equalsTitledPerson的正确实施应该是

@Override
public boolean equals(Object obj) {
    if(obj instanceof TitledPerson) {
        TitledPerson otherPers = (TitledPerson) obj;
        return this.title.equalsIgnoreCase(otherPers.title);                               
    } else {
        return false;
    }
}

答案 2 :(得分:0)

你似乎这样做了:

  if(persons[i] instanceof TitledPerson) {
        if(persons[i].equals(search)) {
        counter++;
        }

person是具有名称和标题的对象 另一方面,搜索是一个字符串 所以你需要这样做:

 if(persons[i] instanceof TitledPerson) {
        if(persons[i].title.equals(search)) {
        counter++;
        }