java 匹配双向链接循环列表中的元素[duplicate]

dgsult0t  于 2023-02-28  发布在  Java
关注(0)|答案(1)|浏览(102)
    • 此问题在此处已有答案**:

(23个答案)
2天前关闭。
我的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();
}

}

kmbjn2e3

kmbjn2e31#

您需要将temp.data == "D"替换为temp.data.equals("D")
这是因为==比较引用,并且split创建String的新示例。

相关问题