我无法弄清楚如何打印多少次" 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;
}
答案 0 :(得分:1)
在与getTitle
关键字进行比较时,更改为使用TitledPerson
课程中的search
。
if(((TitledPerson)persons[i]).getTitle().equals(search)) {
counter++;
}
答案 1 :(得分:0)
equals
中的TitledPerson
方法会调用超类equals
,这会导致名称和标题在相等方面必须相同。
我认为equals
中TitledPerson
的正确实施应该是
@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++;
}