偶数回文

Palindrome with even numbers

我一直在研究回文,它不支持偶数个单词。我不是最擅长编码的。它支持像 "racecar" 或 "tacocat" 这样的词,但它不允许我使用像 "Hannah" 这样的 word/name。我是这个编码方面的新手,所以任何东西都会非常感激。


import java.util.Scanner;
public class Palindrome
{
    public static void main(String args [])
    {
        System.out.printf("\f");
        Scanner input = new Scanner(System.in);
        System.out.println("enter a word");
        String word = input.nextLine();
        int size = word.length();
        int correct = 0;
        int incorrect = 0;
        for (int count = 1; count < size; count++)
        {
            int start = (word.charAt(count));//starting
            int end = (word.charAt(size-count));//ending
            if (start == end)
                correct++;
            else
                incorrect++;
        }
        if (correct == 0)
            System.out.printf("%s is a palindrome", word);
        else 
            System.out.printf("%s is not a palindrome", word);
    } 
}

您可以使用 Stringbuilder 进行回文检查,如下所示

public class test {

public static void main(String args [])
{
    System.out.print("\f");
    Scanner input = new Scanner(System.in);
    System.out.println("enter a word");
    String word = input.nextLine();

    StringBuilder originalStr = new StringBuilder(word);        
    String revString = originalStr.reverse().toString();


    if(word.equalsIgnoreCase(revString)) 
         System.out.print( word +" is a palindrome");
   else 
       System.out.print( word +" is not a palindrome");
} 
}

你的代码有很多问题:

  1. 您正在比较错误索引的字符。例如,将第二个字符(其索引为 1)与最后一个字符(其索引为 size - 1)进行比较。 count应该初始化为0end应该是word.charAt(size-count-1)

  2. correct == 0 时,您将字符串报告为回文,而当它应该是 incorrect == 0 时(顺便说一句,您不需要计数器,只需要一个布尔值)。

  3. 如果您希望检查不区分大小写,您可以在 运行 循环之前将字符串转换为小写。

这应该有效:

public static void main(String args [])
{
    System.out.printf("\f");
    Scanner input = new Scanner(System.in);
    System.out.println("enter a word");
    String word = input.nextLine().toLowerCase();
    int size = word.length();
    boolean isPalindrome = true;
    for (int count = 0; count < size; count++)
    {
        int start = (word.charAt(count));//starting
        int end = (word.charAt(size-count-1));//ending
        if (start != end) {
            isPalindrome = false;
            break;
        }
    }
    if (isPalindrome)
        System.out.printf("%s is a palindrome", word);
    else 
        System.out.printf("%s is not a palindrome", word);
} 

你的代码有几个错误

如果您打算在检查中忽略大写字母,您应该将所有字母都转换为小写字母,因为它在 ASCII 中的标识不同

开始时,您应该从索引 0 而不是 1 开始,从第一个字母开始

要结束,您应该从索引 size-count-1 而不是 size-count 开始,从最后一个字母开始

您应该检查 incorrect == 0 而不是 correct == 0 来确定它是否是回文

public static void main(String args[]) {
    System.out.printf("\f");
    Scanner input = new Scanner(System.in);
    System.out.println("enter a word");
    String word = input.nextLine().toLowerCase();
    int size = word.length();
    int correct = 0;
    int incorrect = 0;
    for (int count = 0; count < size; count++)
    {
        int start = (word.charAt(count)); //starting
        int end = (word.charAt(size-count-1)); //ending
        if (start == end)
            correct++;
        else
            incorrect++;
        System.out.println(start + " " + end);
    }
    if (incorrect == 0)
        System.out.printf("%s is a palindrome", word);
    else 
        System.out.printf("%s is not a palindrome", word);
}

好处:您可以只检查单词的一半而不是遍历整个单词

查回文函数很简单:

public boolean isPalindrome(String str) {
    if(str == null)
        return false;

    str = str.toLowerCase();

    for(int i = 0, j = str.length() - 1; i < j; i++, j--)
        if(str.charAt(i) != str.charAt(j))
            return false;

    return true;
}

首先你应该知道 java 中的数组从 0 开始,而不是 1。所以从 0 开始设置你的计数。
然后,word.charAt(count) 是一个 char,所以最好使用 char 变量而不是 int。

您用来判断一个单词是否为回文的算法似乎是将第一个字符与最后一个字符进行匹配,将第二个字符与倒数第二个字符进行匹配,依此类推。
如果是这样,你只需要在中途循环 for (int count = 1; count < size / 2; count++)

最后一个是,你只需要一个变量来保存回文的状态,如果你的匹配过程发现一个错误然后打破循环并将 isPalindrome 状态设置为错误。

public static void main (String args[])
{
    Scanner input = new Scanner (System.in);
    System.out.println ("enter a word");
    String word = input.nextLine ();
    int size = word.length ();
    boolean isPalindrome = true;
    int maxIndex = size - 1;
    for (int count = 0; count < size / 2; count++)
    {
        char start = word.charAt (count);
        char end = word.charAt (maxIndex - count);
        if (start != end)
        {
            isPalindrome = false;
            break;
        }
    }
    if (isPalindrome)
        System.out.printf ("%s is a palindrome", word);
    else
        System.out.printf ("%s is not a palindrome", word);
}  

请记住 java 的字符串区分大小写,因此 "Tiger" 不同于 "tiger"。因此,Hannah 不会被视为回文。如果您希望它不区分大小写,只需将单词中的所有字符小写即可 word = word.toLowerCase() 在执行 macthing 过程之前。