Java - 返回链表中最大的String

时间:2013-03-03 22:03:12

标签: java recursion iterator linked-list compare

编辑:我更新了主题以回答您的一些问题。这是一项编程任务。我的解决方案不起作用: 要回答关于此线程的注释,应该按字母顺序找到最大的字符串。例如,'汤姆'比'安迪'大。

编写递归方法以查找单链表中的最大值。继承自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;
}}

有人可以告诉我我做错了什么吗?谢谢。

3 个答案:

答案 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
}