Palindrome解析器逻辑错误

时间:2017-02-06 04:59:26

标签: java

我试图创建一个解析输入的程序,并确定它是否是回文。以下粘贴的是我目前的代码:

import java.util.Scanner;
//Gets a message and shift amount and caesar shifts the message by the desired amount. Displays the enciphered message.
public class RobustPalChecker{
   public static void main(String[] args){

      //declare variables
      char current, currentReverse;
      int msgInt;
      String msg, msgReverse;
      StringBuffer sbMsg, newMsg;

      Scanner sc = new Scanner(System.in);
      //get message
      System.out.println("Please enter an integer: ");
      msg = sc.nextLine().toUpperCase();
      //msgReverse = new StringBuffer(msg).reverse().toString();  
      System.out.println(msg);
      //System.out.println("= " + msgReverse);
      //get first and last index of string to check if it's a palindrome

      for(int i = 0; i < msg.length(); i++) {
         current = msg.charAt(i);          
         if(Character.isLetter(current) == false){
            sbMsg = new StringBuffer(msg);
            newMsg = sbMsg.deleteCharAt(i); 
            msgReverse = new StringBuffer(newMsg).reverse().toString();
         }
      }  


      if(newMsg.equals(msgReverse)) {
                  System.out.println("It's a palindrome");
      }else {
                  System.out.println("It's not a palindrome");
      }   
   }
}

忽略评论,因为其中一些不适用,我还没有清理它。我非常肯定导致错误的代码行是isLetter行。该循环的目标是找到任何不是字母的字符,只删除它,并包括空格。最后一个if语句是实际比较反向字符串和常规字符串的语句。现在,当我尝试编译时,最后一个if语句给出的输出是&#34;变量newMsg可能尚未初始化&#34;和msgReverse一样,但那不是我的主要问题 我的主要问题是:我的逻辑是正确还是不正确?

此外,如果你需要我重新解释这个问题,我可以这样做,因为我知道这可能很难遵循,我只是恐慌一点。

1 个答案:

答案 0 :(得分:0)

你的逻辑似乎很好,但由于代码完全没有达到标准,因此难以验证。我已经用英文注释格式编写代码,如果你能填写所有空白,那么就会落实到位。

让我们分两个部分分析问题:

  1. 从字符串
  2. 中删除不需要的字符
  3. 检查从步骤1返回的字符串是否为pallindrome。
  4. 创建两个函数:

    String cleanUp(String arg){
      //create a stringbuffer from arg
      //start for loop
        //delete unwanted chars from stringbuffer
      //end loop
      //make string from stringbuffer and return
    }
    
    boolean pallindrome(String arg){
      //create a new string from arg reverse
      //return true if reversed string and arg are same
    }
    

    现在从main方法调用这些函数。