java偶数回文
我一直在写回文,它不支持偶数个单词。我不擅长编码。它支持“racecar”或“Tacocate”等词,但不允许我使用“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);
}
}
# 1 楼答案
首先,您应该知道java中的数组从0开始,而不是从1开始。因此,将计数从0设置为1
那么,
word.charAt(count)
是一个char,所以最好使用char变量而不是int你用来判断一个单词是否是回文的算法似乎是通过匹配第一个字符和最后一个字符,第二个字符和第二个最后一个字符,等等
如果是这样的话,你只需要半循环
for (int count = 1; count < size / 2; count++)
最后一个是,你只需要一个变量来保存回文的状态,如果你的匹配过程发现了一个false,那么打破循环,只需将
isPalindrome
状态设置为false请记住,java的字符串是区分大小写的,所以“Tiger”不同于“Tiger”。因此,汉娜不会被视为回文。如果您希望它不区分大小写,只需在执行macthing过程之前将单词中的所有字符小写
word = word.toLowerCase()
# 2 楼答案
检查回文函数非常简单:
# 3 楼答案
您可以使用Stringbuilder执行回文检查,如下所示
# 4 楼答案
你的代码中有几个错误
如果您打算在检查中忽略大写字母,那么应该将所有内容转换为小写,因为它在ASCII中的标识不同
从第一个字母开始,应该从索引
0
开始,而不是从1
开始结尾应该从索引
size-count-1
开始,而不是从最后一个字母开始你应该检查
incorrect == 0
而不是correct == 0
来确定它是否是回文额外好处:你可以只检查单词的一半,而不是在整个单词中循环
# 5 楼答案
你的代码有很多问题:
你在比较错误索引的字符。例如,将第二个字符(其索引为1)与最后一个字符(其索引为大小-1)进行比较
count
应该初始化为0
,而end
应该是word.charAt(size-count-1)
当
correct == 0
,当它应该是incorrect == 0
(顺便说一句,你不需要计数器,只需要一个布尔值)时,报告字符串为回文如果希望检查不区分大小写,可以在运行循环之前将字符串转换为小写
这应该是有效的: