2016-05-21 45 views
-2
import java.util.Scanner; 
import java.util.Stack; 

public class Stack_1 { 
    public static void main(String[] args) { 
     String val; 
     Scanner input = new Scanner(System.in); 
     System.out.println("Enter Text: "); 
     val = input.nextLine(); 
     push(val); 
    } 

    public static void push(String str) { 
     Stack<Character> stk = new Stack<Character>(); 
     for (int i = 0; i < str.length(); i++) { 
      stk.push(str.charAt(i)); 
     } 
     System.out.println(stk); 
     String reverseString = ""; 
     String original = ""; 
     int length = original.length(); 
     for (int i = length - 1; i >= 0; i--) 
      reverseString = reverseString + original.toUpperCase().charAt(i); 
     if (original.toUpperCase().equals(stk)) 
      System.out.println("The string is a palindrome."); 
     else if (reverseString.toUpperCase().equals(stk)) 
      System.out.println("The string is not a palindrome."); 
    } 
} 

任何人都可以帮助我。我不知道我错在哪里。问题是创建一个堆栈(字符),并显示它是否是回文的文本。用户必须输入输入。Java二叉搜索树实现

P.S这是我的实验室测试之一。

+0

这个问题的标题是否与检查字符串是回文是否有关? – KevinO

+0

发布[mcve],你不能只发布代码并说“修复它”。 –

+0

我只需要关于如何改进我的代码的指导和建议。从那里我可以修复它。 – Helmet

回答

0

如果我正确地跟着代码,问题似乎是OP正在比较String对象(originalreverseString)到Stack<Character>对象。

因此,可能的故障是String对象与Stack对象的不正确尝试比较。

我认为在if/else if逻辑中存在第二次失败,因为“cool”的示例输入不是回文,但在这种情况下没有输出。

编辑:尽管OP代码确实尝试针对输入数据的情况(在问题中没有给出)来调整,但它没有考虑空格或其他标点符号。根据the entry on Wikipedia about Palindromes,标点符号通常也被忽略。同样,无论是关注空间,时段,破折号等等,都是问题中没有定义的练习的一部分。根据完整的要求,这个问题有点不明确。

我会使用堆栈将采取String,通过人物推到Stack(可能纠正情况和剥离出来,当时所有的标点),然后从Stack弹出做一个比较想一个解决方案。我认为OP代码在使用Stack时缺少部分要求。

只有Stack上只有字符的示例代码。还有其它的方法,当然:

// push by character onto the stack; use only 
// characters, and convert to lower case 
for (int i = 0; i < str.length(); i++) { 
    char c = str.charAt(i); 
    if ((c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z')) { 
     stk.push(Character.toLowerCase(c)); 
    } 
} 

实施例以从校验字符串中删除所有的非字符:

// convert out comparison String to lower case and remove 
// all non letters 
String chk = str.toLowerCase().replaceAll("[^a-z]", ""); 

例循环中使用的Stack所要检查的字符串:

// assume we have a palindrome 
    boolean palindrome = true; 
    // counter across the String 
    int i = 0; 

    // loop while there is more on the stack and we haven't 
    // failed our test 
    while (! stk.isEmpty() && palindrome) { 
     Character c = stk.pop(); 
     palindrome = (c == chk.charAt(i++)); 
    } 

样品测试数据:

酷是回文:假
妈妈是回文:真正
决不奇数或偶数是回文:真正
一个人,一个计划,运河 - 巴拿马!是一个回文:真