簡體   English   中英

Java-在鏈表中返回最大的String

[英]Java - returning largest String in a linkedlist

編輯:我更新了線程來回答您的一些問題。 這是編程任務。 我的解決方案不起作用:要回答該線程上的評論,應該按字母順序找到最大的字符串。 例如,“湯姆”大於“安迪”。

編寫一個遞歸方法以在單鏈表中找到最大值。 從類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;
}}

有人可以告訴我我做錯了什么嗎? 謝謝。

問題在於初始化類的方式:MyLinkedList ..

你有 :

String largest=it.next();

在建設中,列表是空的,所以it是空的。 因此it.next()為null;

這不是最佳解決方案,但此解決方案是通過修改您提供的代碼來實現的。

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;
}}

抱歉,我看不到您的代碼如何引發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
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM