我的
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();
}
}
你需要用
temp.data == "D"
替换temp.data.equals("D")
。
发生这种情况是因为
==
比较引用和 split
创建 String
的新实例。