关于equals和compareTo方法的Java问题
您好,我对Java非常陌生,在linkedList上运行的两个方法有这个问题 我编写的find函数总是返回false。 find方法是将type E元素作为参数,如果该项在链表中,则返回true,否则返回false max方法是,如果列表不为空,则返回列表中的最大元素(本例中为最长字符串),如果列表为空,则返回null。必须通过compareTo()进行比较。 我写的max只看每个元素(字符串)的第一个字母 非常感谢您的帮助关于equals和compareTo方法的Java问题,java,linked-list,equals,compareto,Java,Linked List,Equals,Compareto,您好,我对Java非常陌生,在linkedList上运行的两个方法有这个问题 我编写的find函数总是返回false。 find方法是将type E元素作为参数,如果该项在链表中,则返回true,否则返回false max方法是,如果列表不为空,则返回列表中的最大元素(本例中为最长字符串),如果列表为空,则返回null。必须通过compareTo()进行比较。 我写的max只看每个元素(字符串)的第一个字母 非常感谢您的帮助 public boolean find(E e){ L
public boolean find(E e){
LinkedListTest<E>.Node node = null;
Node current =node;
while (current != null){
if (current.equals(e)){
return true;
}
else{
current=current.next;
}
}
return false;
}
public E max(){
Iterator<E> iterator=iterator();
E max = iterator.next();
while (iterator.hasNext())
{
E next = iterator.next();
if (max.compareTo(next) > 0)
max = next;
}
return max;
}
公共布尔查找(E){
LinkedListTest.Node节点=null;
节点电流=节点;
while(当前!=null){
if(电流等于(e)){
返回true;
}
否则{
当前=当前。下一步;
}
}
返回false;
}
公共E max(){
迭代器迭代器=迭代器();
E max=迭代器.next();
while(iterator.hasNext())
{
E next=迭代器.next();
如果(最大比较到(下一个)>0)
max=next;
}
返回最大值;
}
您的find
始终返回false,因为您将节点
和当前
初始化为null,因此不会进入循环。此外,您应该将e与项进行比较,而不是与节点进行比较
可能是:
public boolean find(E e){
Node current = head;
while (current != null){
if (current.item.equals(e)){
嗨,谢谢你的回复!调用函数时,我将其视为字符串是否正确?System.out.println(lst.find(“Mango”));因为我关心的是,参数是E,但我将字符串称为“Mango”。@Robert是的,您是正确的,因为您创建了
LinkedListTest
,所以在本例中E是字符串。感谢您的帮助!我仍然对max函数感到困惑。@Robert我在max方法中看到的唯一问题是,如果列表为空,它将抛出异常,因为您在检查hasNext()之前调用了第一个next()。max的输出结果是什么?你应该买李子。你还期待什么吗?我想找到最长的字符串元素,它应该返回橙色。所以我想我用compareTo是不对的?因为它是按词典编纂的。关于如何找到最长的字符串元素有什么建议吗?