[英]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.