gpt4 book ai didi

java - 比较 Java 中的堆栈弹出和队列出队(回文)

转载 作者:搜寻专家 更新时间:2023-11-01 03:54:56 29 4
gpt4 key购买 nike

完全披露:这是一项作业,所以请不要发布实际的代码解决方案!

我有一个作业要求我从用户那里获取一个字符串并将其传递到堆栈和队列中,然后使用这两者来比较字符以确定该字符串是否为回文。我已经编写了程序,但是某处似乎存在一些逻辑错误。相关代码如下:

public static void main(String[] args) {

UserInterface ui = new UserInterface();
Stack stack = new Stack();
Queue queue = new Queue();
String cleaned = new String();
boolean palindrome = true;

ui.setString("Please give me a palindrome.");
cleaned = ui.cleanString(ui.getString());

for (int i = 0; i < cleaned.length(); ++i) {
stack.push(cleaned.charAt(i));
queue.enqueue(cleaned.charAt(i));
}

while (!stack.isEmpty() && !queue.isEmpty()) {
if (stack.pop() != queue.dequeue()) {
palindrome = false;
}
}

if (palindrome) {
System.out.printf("%s is a palindrome!", ui.getString());
} else
System.out.printf("%s is not a palindrome :(", ui.getString());

stack.dump();
queue.clear();

}

public class Stack {

public void push(char c) {
c = Character.toUpperCase(c);
Node oldNode = header;
header = new Node();
header.setData(c);
header.setNext(oldNode);
}

public char pop() {
Node temp = new Node();
char data;
if (isEmpty()) {
System.out.printf("Stack Underflow (pop)\n");
System.exit(0);
}
temp = header;
data = temp.getData();
header = header.getNext();
return data;
}

}

public class Queue {

public void enqueue(char c) {
c = Character.toUpperCase(c);
Node n = last;
last = new Node();
last.setData(c);
last.setNext(null);
if (isEmpty()) {
first = last;
} else n.setNext(last);
}

public char dequeue() {
char data;
data = first.getData();
first = first.getNext();
return data;
}

}

public String cleanString(String s) {
return s.replaceAll("[^A-Za-z0-9]", "");
}

基本上,当通过 Eclipse 中的调试器运行我的代码时,我的 pop 和 dequeue 方法似乎只选择某些字母数字。我正在使用 replaceAll("[^A-Za-z0-9]", "") 来“清除”用户字符串中的任何非字母数字字符(!、?、& 等)。当我说它只选择某些字符时,似乎没有任何我可以辨别的模式。有什么想法吗?

最佳答案

假设您的队列和堆栈是正确的(我尝试使用在 jdk 中找到的 Deque 实现),您的通用算法可以正常工作。由于您的作业涉及数据结构,我几乎只是采用了您的主要逻辑并将数据结构替换为 ArrayDequeue,所以我不觉得我在为您回答这个问题。

    String word = "ooffoo";

word = word.replaceAll("[^A-Za-z0-9]", "");

Deque<Character> stack = new ArrayDeque<Character>(word.length());
Deque<Character> queue = new ArrayDeque<Character>(word.length());

for (char c : word.toCharArray()) {
stack.push(c);
queue.add(c);
}

boolean pal = true;

while (! stack.isEmpty() && pal == true) {
if (! stack.pop().equals(queue.remove())) {
pal = false;
}
}

System.out.println(pal);

关于java - 比较 Java 中的堆栈弹出和队列出队(回文),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10952455/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com