2014-03-26 52 views
1

我的代碼用於刪除雙向鏈接列表的播放器正常工作,但System.out.print聲明沒有。 我在removeFirst和removeLast之前放置了System.outs.print語句,因爲我不知道如何輸出在節點中刪除的數據,因此在刪除之前將其打印出來。 我知道我目前的方法是不好的設計,但我不確定使用什麼函數。雙向鏈接列表輸出已移除元素

在if語句中檢查節點是否成功刪除了什麼條件?

else if (mChoice.startsWith("4")) { 
    System.out.println("What do you want to delete?"); 

    mChoice = in.nextLine(); 

    if (mChoice.contains("first")) { 
     System.out.println("Removed first player " + rBook.mHead.getData()); 
     rBook.removeFirst(); 
    } 

    else if (mChoice.contains("last")) { 
     System.out.println("Removed last player " + rBook.mHead.mPrev.getData()); 
     rBook.removeLast(); 
    } 

    else { 

     rBook.remove(rBook.searchByName(mChoice)); 

     // System.out.println(rBook.get() + " removed."); this line 

    } 

回答

2

如果你不想改變你的播放器類和它的功能試試這個:

else if (mChoice.startsWith("4")) { 
    System.out.println("What do you want to delete?"); 

    mChoice = in.nextLine(); 
    Player deleted; 
    if (mChoice.contains("first")) { 
     deleted = rBook.mHead.getData(); 
     rBook.removeFirst(); 
     System.out.println("Removed first player " + deleted); 
    } 

    else if (mChoice.contains("last")) { 
     deleted = rBook.mHead.mPrev.getData(); 
     rBook.removeLast(); 
     System.out.println("Removed last player " + deleted); 

    } 

    else { 
     deleted = rBook.searchByName(mChoice); 
     rBook.remove(searchByName(mChoice)); 
     System.out.println(deleted + " removed."); 

    } 
2

我建議您修改remove()函數返回您剛刪除的元素。所以你看代碼看起來像:

Player deleted = rBook.remove(rBook.searchByName(mChoice)); 
System.out.println(deleted.get() + " removed."); 
2

如果你想存儲該列表的元素已被刪除(打印或以後取消刪除,例如),那麼一個更好的設計是無論是

  • 僅標記這些元素去掉,或
  • 將它們轉移到另一個,「歷史」列表中。

哪種解決方案更好取決於您想解決的問題。