0

私の問題は、関数の最後にある while ループにあります

public void insertInOrder(int i){
    Node temp;
    if(head == null){
        head = new Node(i,null);
    }
    else if (head.getData() > i){
        temp = new Node(i,head);
        head = temp;
    }
    else {
        Node curr = head;
        while (curr.getNext() != null && curr.getNext().getData() <= i);
            while(curr.getNext().getData() <= i)
               curr = curr.getNext();
        temp = new Node(i,curr.getNext());
        curr.setNext(temp)

while ループに入るには、リンク リスト内の次のノードを null と等しくなく、i 未満にする必要があります。これは、リストの最後につながる値を送信するまで機能し、2 番目のステートメントを評価できないため、null ポインター例外エラーが発生します。どうすればこれを回避できますか?

4

2 に答える 2

3

そこにあってはならない末尾のセミコロンがあると思います:

---------------------------------------------------------------v
while (curr.getNext() != null && curr.getNext().getData() <= i);
        while(curr.getNext().getData() <= i)
           curr = curr.getNext();

私の意見では、それを削除すると、コードが機能するはずです。

この種の間違いは、中括弧が必要と思われない場合でも常に中括弧を使用する必要がある理由の 1 つです。したがって、while ループを次のように書き直します。

while (curr.getNext() != null && curr.getNext().getData() <= i) {
        while(curr.getNext().getData() <= i) {
           curr = curr.getNext();
        }
 }
于 2013-02-21T01:38:32.783 に答える
0

ステートメントの末尾にあるセミコロンを削除します

while (curr.getNext() != null && curr.getNext().getData() <= i);<----

于 2013-02-21T01:40:36.723 に答える