我一直在研究回文,它不支持偶数个单词。我不是最擅长编码的人。它支持诸如“ racecar”或“ tacocat”之类的单词,但不允许我使用诸如“ Hannah”之类的单词/名称。我是这个编码方面的新手,所以我们将不胜感激。
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);
}
}
答案 0 :(得分:1)
您的代码有很多问题:
您正在比较错误索引的字符。例如,将第二个字符(索引为1)与最后一个字符(索引为size-1)进行比较。 count
应该初始化为0
,而end
应该初始化为word.charAt(size-count-1)
。
您在correct == 0
时将字符串报告为回文,而在incorrect == 0
时则将其报告为回文(顺便说一句,您不需要计数器,只需一个布尔值)。
如果您希望检查不区分大小写,则可以在运行循环之前将String转换为小写。
这应该有效:
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);
}
答案 1 :(得分:1)
您的代码中有几个错误
如果您打算在检查中忽略大写字母,则应将所有内容都转换为小写字母,因为它在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);
}
奖金:您可以只检查单词的一半,而不必遍历整个单词
答案 2 :(得分:1)
首先,您应该知道Java中的数组从0开始,而不是一个。所以将计数从0设为1。
然后,word.charAt(count)
是一个char,因此最好使用char变量而不是int。
似乎您用来确定一个单词是否是回文的算法是通过将第一个字符与最后一个字符匹配,将第二个字符与倒数第二个字符匹配,依此类推。
在这种情况下,您只需要中途循环for (int count = 1; count < size / 2; count++)
。
最后一个是,您只需要一个变量来保持回文状态,如果您的匹配过程发现错误,则中断循环,只需将isPalindrome
状态设置为false。
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的String区分大小写,因此“ Tiger”与“ tiger”不同。因此,汉娜将不会被视为回文。如果您希望它不区分大小写,则在进行Macthing处理之前,只需将word = word.toLowerCase()
这样的单词中的所有字符都小写。
答案 3 :(得分:0)
您可以使用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");
}
}
答案 4 :(得分:0)
检查回文功能很简单:
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;
}