3

だから私は名前でいっぱいのこのリンクリストを持っています。ユーザーは名前の最初の文字を検索し、名前がその文字で始まるノードを出力します。実行すると、応答が返されないと思いました。ループにいくつかの印刷行を挿入すると、それらが戻ってきます。

ここにあります:

public String printSection(){
        LinkedListNode current = front;
        String searchedLetter;
        int i = 0;
        String retSec = "The nodes in the list are:\n";

        //Get the input of the name being removed
        Scanner s = new Scanner(System.in);
        System.out.println("Enter the first letter of the section you would like to print out");
        searchedLetter = s.nextLine();

        //while current is not null
        while(current != null){
            //if the data in current starts with the letter entered for searchedLetter
            if(current.getData().startsWith(searchedLetter)){
            //if(current.getData().substring(0,1) == searchedLetter){
                        //Increment the number of the node
                        i++;
                        //Print the node(s)
                        retSec += "Node " + i + " is: " + current.getData() + "\n";
                        //Traverse the list
                        current = current.getNext();
                        System.out.println("You made it here");
            }
        }
        return retSec;
    }
}

ここにあります:(新しい作業方法)

public void printSection(){

    LinkedListNode current = front;
    String searchedLetter;
    int i = 0;

    //Get the input of the name being removed
    Scanner s = new Scanner(System.in);
    System.out.println("Enter the first letter of the section you would like to print out");
    searchedLetter = s.nextLine();

    //while current is not null
    while(current != null){
        //if the data in current starts with the letter entered for searchedLetter
        if(current.getData().startsWith(searchedLetter)){
                    //Increment the number of the node
                    i++;
                    //Print the node
                    System.out.println("Node " + i + " is: " + current.getData());
        }
        //Traverse the list
        current = current.getNext();
    }
}
4

1 に答える 1

2

ここで無限ループに陥っています。

要素が検索された文字で始まるかどうかに関係なく、必要な while ループは 1 つだけで、リスト内の次の要素にジャンプする必要があります。

したがって、if ステートメントを作り直して、2 番目の while ループを削除します。また、常に次の要素に移動するようにしてください。

編集:コードをもう少し詳しく見てみると、ユーザーからの入力をチェックしていないことに気付きました。彼は実際には 1 文字に制限されていませんが、テキスト全体を入力できます。したがって、彼に与えた説明を修正するか、入力の検証を導入します (入力が無効な場合のエラー メッセージを含めます)。

于 2013-11-07T08:11:25.073 に答える