将从控制台输入获取的字符串与数组中的字符串进行比较时,除非我添加false
,否则它始终为.toString()
。两个字符串都相等,它应该可以在不添加.toString()
的情况下工作。任何人都可以帮我找出原因吗?
在这里,我从控制台获取要比较的字符串:
System.out.println("\nEnter the name you wish to remove from the list.");
String name = in.nextLine();
System.out.println("\n\"" + myNameList.remove(new MyOrderedList(name)) + "\"" + " removed from the name list\n");
以下是删除方法:
public T remove(T element) {
T result;
int index = find(element);
if (index == NOT_FOUND) {
throw new ElementNotFoundException("list");
}
result = list[index];
rear--;
/** shift the appropriate elements */
for (int scan = index; scan < rear; scan++) {
list[scan] = list[scan+1];
}
list[rear] = null;
return result;
}
以下是问题所在的查找方法:
private int find(T target) {
int scan = 0, result = NOT_FOUND;
boolean found = false;
if (!isEmpty()) {
while (!found && scan < rear) {
if (target.equals(list[scan])) { // Not sure why this does not work until I add the .toString()s
found = true;
}
else {
scan++;
}
}
}
if (found) {
result = scan;
}
return result;
}
if (target.equals(list[scan]))
始终返回false
,除非我将其更改为if (target.toString().equals(list[scan].toString())
。
我使用ArrayList
来表示列表的数组实现。列表的前面保留在数组索引0处。如果有帮助,则扩展此类以创建特定类型的列表。如果需要,我可以发布所有课程。
答案 0 :(得分:3)
如果第一个参数是String,则只使用String.equals。
使用.equals()的字符串比较不适用于java
看起来这是有用的东西。它的T.equals()不起作用。
如果你有这个工作,那就意味着你明智地覆盖了toString()
。
target.toString().equals(list[scan].toString()
但如果这不起作用
target.equals(list[scan])
表示您没有正确覆盖equals(Object)
。
答案 1 :(得分:1)
如果myNameList
有String
个通用参数,那么这将不起作用,因为没有String
等于MyOrderedList
的类型。
如果myNameList
有MyOrderedList
个通用参数,那么您需要确保为其定义equals()
方法。
答案 2 :(得分:0)
以下是Eclipse为我生成的内容:
/* (non-Javadoc)
* @see java.lang.Object#hashCode()
*/
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((myList == null) ? 0 : myList.hashCode());
return result;
}
/* (non-Javadoc)
* @see java.lang.Object#equals(java.lang.Object)
*/
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj == null) {
return false;
}
if (!(obj instanceof MyOrderedList)) {
return false;
}
MyOrderedList other = (MyOrderedList) obj;
if (myList == null) {
if (other.myList != null) {
return false;
}
} else if (!myList.equals(other.myList)) {
return false;
}
return true;
}
我非常感谢大家的快速反应。我是java的新手,所以当我遇到问题时,我在这里阅读了很多帖子,我总能在这里找到答案。谢谢大家!