编辑:我更新了主题以回答您的一些问题。这是一项编程任务。我的解决方案不起作用: 要回答关于此线程的注释,应该按字母顺序找到最大的字符串。例如,'汤姆'比'安迪'大。
编写递归方法以查找单链表中的最大值。继承自LinkedList类并添加递归方法。您将需要使用迭代器来访问链表的每个节点。您可能需要添加辅助方法来启动递归。使用驱动程序类填充链接列表并演示您的方法是否有效。向驱动程序类添加其他测试。 提供的驱动程序类中最大的是Tom。
提供了驱动程序类:
public class MyLinkedListDriver {
public static void main(String[] args) {
// TODO Auto-generated method stub
MyLinkedList myLinkedList = new MyLinkedList();
myLinkedList.add("Sarah");
myLinkedList.add("Barbara");
myLinkedList.add("Tom");
myLinkedList.add("George");
String largest = myLinkedList.findLargest();
System.out.println(largest);
System.out.println(myLinkedList.get(0));
}}
我的解决方案(不起作用):好吧,我得到了nullpointer异常。
import java.util.Iterator;
import java.util.LinkedList;
public class MyLinkedList extends LinkedList<String> {
Iterator<String> it = super.iterator();
String largest=it.next();
public String findLargest(){
if (it.hasNext()==false){
return largest;
}
else{
String temp = it.next();
int x=largest.compareTo(temp);
if(x>0){
largest=temp;
}
findLargest();
}
return largest;
}}
有人可以告诉我我做错了什么吗?谢谢。
答案 0 :(得分:0)
问题在于初始化类的方式:MyLinkedList ..
你有:
String largest=it.next();
在构造时,列表为空,因此it
为空。因此it.next()
为空;
答案 1 :(得分:0)
这远非最佳解决方案,但此解决方案是修改您提供的代码。
import java.util.Iterator;
import java.util.LinkedList;
public class MyLinkedList extends LinkedList {
Iterator<String> it = null;
String largest="";
public String findLargest(){
if (it == null) {
it = super.iterator();
}
if (it.hasNext()==false){
it = null;
return largest;
}
else{
String temp = it.next();
int x=largest.compareTo(temp);
if(x<0){
largest=temp;
}
findLargest();
}
return largest;
}}
答案 2 :(得分:0)
抱歉,我看不到你的代码如何抛出NullPointerException。
它应该抛出NoSuchElementException,因为你试图在构造时获取迭代器的第一项,当集合仍为空时。这显然是一个错误。
提示如何解决这个问题:迭代器不应该是数据成员。它没有描述对象的状态。考虑将迭代器的新实例传递给辅助方法,这是一个递归方法:
public String findLargest(){
return findLargest(iterator());
}
private static String findLargest(Iterator<String> it) {
// Think how you implement this part recursively WITHOUT using any data member
}