2017-12-04 36 views
0

リンクリストの文字列のすべてのインスタンスを、選択した置換文字列で置き換えるメソッドを作成しようとしています。Javaのリンクリストで文字列を再帰的に置換する

しかし、私が知っているのは、第3引数で選択されたノードをチェックするように見えるだけで、リストを再現しません。私はそれがすべてのノードをチェックして、それを作るために何をする必要があるか

RED, red, red, green 

わからない:出力として出てくるしかし

public class ListApp { 

    public static void main(String[] args){ 
     Node n4 = new Node("green", null); 
     Node n3 = new Node("red", n4); 
     Node n2 = new Node("red", n3); 
     Node n1 = new Node("red", n2); 

     LinkedList list = new LinkedList(n1); 

     System.out.println(list); 

     list.replace("red", "RED", n1); // CALLING THE METHOD 

     System.out.println(list); 

    } 
} 

public void replace(String firstItem, String replaceItem, Node n){ 
    if (n != null) { 
     if (n.getItem().equals(firstItem)) { 
      n.setItem(replaceItem); 
      n = n.next(); 
     } 
    } 
} 

は、ここでの主なアプリです。

必要な場合は、ノードライブラリ:

package lib; 

public class Node { 
    private String item; 
    private Node nextItem; 

    public Node(String str, Node n){ 
     item = str; 
     nextItem = n; 
    } 
    public String getItem(){ 
     return item; 
    } 
    public void setItem(String str){ 
     item = str; 
    } 
    public Node next(){ 
     return nextItem; 
    } 
    public void setNext(Node n){ 
     nextItem = n; 
    } 
} 

すべての情報をいただければ幸いです、ありがとう!

+0

'置き換える(firstItem、replaceItem、n.next())' – Brendan

答えて

0

あなたはほとんどそれを持っていた:

public void replace(String firstItem, String replaceItem, Node n){ 
    if (n != null) { 
     if (n.getItem().equals(firstItem)) { 
      n.setItem(replaceItem); 
      n = n.next(); 
     } 
     replace(firstItem, replaceItem, n); //Recursive call here 
    } 
} 
+0

は「スレッドでの例外 "LIBのメイン" java.lang.StackOverflowErrorを取得します(LinkedList.java:74) "(約100行74行目) –

+0

@ JohnDoeはあなたの再帰呼び出しで' n.next() 'に変更します:) – Nathan

+0

これを今すぐ入手しました、Cheers @Nathan –

1

あなたのコードの問題は、あなたがrecursivly関数を呼び出していないこと、です。

さらに、アイテムを交換したときだけでなく、毎回次のノードを取得することもできます。

したがって、あなたのコードは次のようになります。

public void replace(String firstItem, String replaceItem, Node n){ 
    if (n != null) { 
     if (n.getItem().equals(firstItem)) { 
      n.setItem(replaceItem); 
     } 
     replace (firstItem, replaceItem, n.next()); 
    } 
} 
+1

これはうまくいきましたが、これまでのところ、助けてくれてありがとうございます。 –

関連する問題