我想使用java中的堆栈实现来检查字符串是否回文。我尝试过许多方法,但这并没有给我正确的答案。有人能帮我吗?
我在我的类中实现了一个变量名为"stackArray“的堆栈。
回文法:
Stack s1 = new Stack(5);
for (int i = 0; i < 5; i++) {
s1.push(stackArray[i]);
}
String [] reverser = new String[5];
while (!s1.isEmpty()) {
int count = 0;
reverser[count] = s1.pop();
count++;
}
if (s1.equals(reverser)){
System.out.println("The input String is a palindrome.");
}
else
System.out.println("The input String is not a palindrome.");司机代码:
public static void main(String[] args) throws Exception {
Stack st = new Stack(5);
st.push("l");
st.push("e");
st.push("v");
st.push("e");
st.push("l");
System.out.println("");
System.out.println("When Palindromic is starting; ");
System.out.println("");
st.palindromic();
}很明显,单词"level“是回文,但它总是说”输入字符串不是回文。“
发布于 2019-05-25 12:27:40
您的解决方案至少有两个基本问题:
1)暂时忽略项目2,当您使用s1来确定输入是否为回文时,它看起来是空的。您需要确保在进行等效检查时,两个变量都指向包含数据的结构!
2) s1是堆栈,反转器是String[]。Stack中的“equals”的默认实现是检查参数是否是堆栈的实例。因为永远不会出现这种情况,所以您将始终看到“输入字符串不是回文”。
要修复2),需要使两个对象都具有相同的数据类型(无论是堆栈还是String[])。如果选择后一个String[],则需要验证每个索引i处的字符串在s1和反转器中都是等效的。
希望这能有所帮助!
发布于 2019-05-25 13:21:15
检查堆栈类中等于方法的实现,因为实现没有发布,因此很难找到问题。但是,如果您不需要这样做,您可以使用相同的方法进行比较。记住使用相同的数据类型。例如,将数组和堆栈强制转换为字符串。然后使用string类的相等方法。
String original = "level"; //The contents of you stack dumped into a String
String[] reversedArr = {"l", "e", "v", "e", "l"}; //And your array reverser
String reversed = "";
for (String letter : reversedArr)
reversed = reversed.concat(letter);
System.out.println(original.equals(reversed));发布于 2019-05-25 17:21:08
我在20年没有使用Java之后,重新学习它。下面是我之前对你的主要帖子的评论的一个实现。我的堆栈是基于OOP的,而不是使用内部数组:
public class Palindrome {
public static void main(String[] args)
{
java.util.Scanner keyboard = new java.util.Scanner(System.in);
System.out.print("Enter the word to check: ");
String input = keyboard.nextLine();
Palindrome p = new Palindrome(input);
System.out.println("Input: " + p.getInput());
System.out.println("Reversed: " + p.getInputReversed());
System.out.println("Palindromic: " + p.isPalindromic());
}
private String _input;
public Palindrome(String input)
{
_input = input.toLowerCase();
}
public String getInput()
{
return _input;
}
public String getInputReversed()
{
CharStack chars = new CharStack(getInput());
String reversed = "";
while(!chars.empty())
{
try {
reversed = reversed + chars.pop();
} catch (Exception e) {
System.out.println("Exception: " + e.getMessage());
}
}
return reversed;
}
public boolean isPalindromic()
{
return getInput().equals(getInputReversed());
}
private class CharStack
{
private CharStackNode top = null;
private class CharStackNode
{
public char c;
public CharStackNode next = null;
public CharStackNode(char inC, CharStackNode top)
{
c = inC;
next = top;
}
}
public CharStack(String input)
{
for(char c: input.toCharArray())
{
push(c);
}
}
public void push(char c)
{
top = new CharStackNode(c, top);;
}
public char pop() throws Exception
{
if (!empty())
{
char c = top.c;
top = top.next;
return c;
}
else
{
throw new Exception("Cannot pop() an empty stack!");
}
}
public boolean empty()
{
return top == null;
}
}
}https://stackoverflow.com/questions/56304575
复制相似问题