双向链表中的匹配元素

问题描述 投票:0回答:1

我的

CircList
类是一个字符串元素的循环双向链表。该类有一个添加元素的方法称为
insertEnd()
,另一个显示元素的方法称为
displayMatch()
displayMatch()
方法是打印一个元素,如果元素等于“D”。

public static void main()
方法中,如果我手动使用
insertEnd()
一次将一个字母添加到循环列表中,我将使用
displayMatch()
获得预期的输出(“D”)。

但是因为我想将整个字母表添加到循环列表中,所以我想使用循环而不是手动添加字母。但是当我使用带有

insertEnd()
的循环来添加字母时,我没有得到带有
displayMatch()
的预期输出(“D)。没有错误消息但控制台是空的。为什么?

感谢您的帮助!

import java.util.*;

public class CircList {

static cNode head;                            
static cNode tail;                            


static class cNode {
    String data;
    cNode next;                              
    cNode prev;
};


static void insertEnd(String value)
{   
    if (head == null) {                                                                                    
        cNode newNode = new cNode();
        newNode.data = value;
        newNode.next = newNode;
        newNode.prev = newNode;
        head = newNode;                       
        return;                                                  
    }
               
    cNode newNode = new cNode();                 
    newNode.data = value;                                                
    tail = head.prev;                                                           
    newNode.next = head;                    
    head.prev = newNode;                    
    newNode.prev = tail;                        
    tail.next = newNode;                    
}                                          


static void displayMatch()
{
    cNode temp = head;             
    while (temp.next != head) {
        if(temp.data == "D")               
        {                                  
            System.out.print(temp.data);    
        }
        temp = temp.next;                     
        }                                                                
}



public static void main(String[] args) {
    
    // IF I MANUALLY USE insertEnd() TO ADD LETTERS TO THE CIRCULAR LIST, 
    // I GET THE EXPECTED OUTPUT ("D") WITH displayMatch().                        
    insertEnd("A");            
    insertEnd("B");            
    insertEnd("C");
    insertEnd("D");
    insertEnd("E");
    displayMatch();
    
    // BUT IF I INSTEAD USE A FOR LOOP WITH insertEnd() TO ADD LETTERS TO THE CIRCULAR LIST, 
    // I DON'T GET THE EXPECTED OUTPUT ("D") WITH displayMatch(). I GET NO OUTPUT.
    String alphabetString = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    List<String> alphabetList= Arrays.asList(alphabetString.split(""));
    int alphabetListSize = alphabetList.size();
    for(int i = 0 ;i < alphabetListSize ;i++)
    {
        String letter = alphabetList.get(i);        
        insertEnd(letter);      
    }
    displayMatch();
}

}

java doubly-linked-list circular-list
1个回答
0
投票

你需要用

temp.data == "D"
替换
temp.data.equals("D")

发生这种情况是因为

==
比较引用和
split
创建
String
的新实例。

© www.soinside.com 2019 - 2024. All rights reserved.