0

編集: スレッドを更新して、いくつかの質問に答えました。これはプログラミングの課題です。私の解決策は機能しません。このスレッドのコメントに答えるには、最大の文字列をアルファベット順に見つける必要があります。たとえば、'Tom' は 'Andy' よりも大きいです。

単方向リストで最大値を見つける再帰メソッドを作成します。クラス 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;
}}

誰かが私が間違ったことを教えてもらえますか? ありがとうございました。

4

3 に答える 3

0

問題は、クラスを初期化する方法にあります: MyLinkedList ..

あなたが持っている :

String largest=it.next();

構築中、リストは空なので、it空です。したがってit.next()、null です。

于 2013-03-03T22:36:17.860 に答える
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;
}}
于 2013-03-03T22:42:58.843 に答える
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
}
于 2013-03-03T22:47:19.290 に答える