我试图创建一个解析输入的程序,并确定它是否是回文。以下粘贴的是我目前的代码:
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一样,但那不是我的主要问题 我的主要问题是:我的逻辑是正确还是不正确?
此外,如果你需要我重新解释这个问题,我可以这样做,因为我知道这可能很难遵循,我只是恐慌一点。
答案 0 :(得分:0)
你的逻辑似乎很好,但由于代码完全没有达到标准,因此难以验证。我已经用英文注释格式编写代码,如果你能填写所有空白,那么就会落实到位。
让我们分两个部分分析问题:
创建两个函数:
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方法调用这些函数。