我正在尝试编写一个程序来检查单词是否是回文。我的代码编译但isItPalindrome方法中的代码似乎根本没有运行。我希望有人可以指出我哪里出错了。这是我的代码:
class Main
{
public static void main ( String args[] )
{
System.out.print ("#Enter word");
String word = BIO.getString();
String wordLowerCase = word.toLowerCase(); // converts word to lower case (only way i could think of to ignore case)
char letters[] = wordLowerCase.toCharArray(); // converts string into an array of character
while ( !word.equals ("END")){
if (isItPalindrome(letters) == true)
{
System.out.print (""+word+"");
System.out.println (" is a palindrome");
}
else if (isItPalindrome(letters) == false)
{
System.out.print (""+word+"");
System.out.println (" is not a palindrome");
}
System.out.print ("#Enter word");
word = BIO.getString();
}
}
public static boolean isItPalindrome ( char letters[]){
boolean palindrome = true;
if (letters.length%2 == 0){
for (int index=0; index<letters.length/2-1; index++) //index will finish at letters/2
{
if (letters[index] != letters[letters.length-index-1]) //checks if index is the same as its opposite letter
{
return false;
}
else //if any pairs of letters are not in ascending order then it returns fasle and breaks out of the loop
{
palindrome = true;
}
}
}
else{
for (int index = 0; index < (letters.length-1)/2-1; index++)
{
if (letters[index] != letters[letters.length-index-1]){
return false;
}
else{
palindrome = true;
}
}
}
return palindrome;
}
}
答案 0 :(得分:1)
除了最初的单词,您的角色数组letters
永远不会反映主方法中while循环中的当前word
。当你说出你的方法时,我不知道你的意思,而且似乎根本没有。#34;但我认为你的意思是它运行错误的输出。这就是原因之一。一定要打电话
wordLowerCase = word.toLowerCase();
letters = wordLowerCase.toCharArray();
while循环的每次迭代。
旁注:在isItPalindrome
方法中,您根本不需要任何else语句或布尔palindrome
。简单return false
如果你发现这个词不像你现在那样的回文。然后,如果你已经到了这个词的末尾,它必须是一个回文,你可以return true
。
答案 1 :(得分:0)
main方法中存在一些问题,例如char-array从未更新过,而回文方法远非复杂,这是工作版本:
public static void main(String args[]) {
System.out.print("#Enter word: ");
String word = BIO.getString();
while (!word.equals("END")) {
char[] letters = word.toLowerCase().toCharArray();
if (isItPalindrome(letters) == true) {
System.out.println(word + " is a palindrome");
} else {
System.out.print(word + " is not a palindrome");
} // OR
// Use this one-liner instead of the if:
// System.out.println(word + isItPalindrome(letters) ?
// " is a palindrome" : " is not a palindrome");
System.out.print("#Enter word: ");
word = BIO.getString();
}
}
public static boolean isItPalindrome(char letters[]) {
for (int i = 0; i < letters.length / 2; i++) {
if (letters[i] != letters[letters.length - i - 1]) {
return false;
}
}
return true;
}
希望这有帮助。
答案 2 :(得分:0)
首先,回答标题中的问题:
public boolean palindrome(char C)
返回类型为boolean
,但要求您传递一个字符。
第二
你以反转单词的方式过度复杂化以检查它们。您可以简单地将单词作为字符串,并将其拆分,将其放入Characters
数组中。然后将每个char
变量放入Stack
。然后当你将它们从堆栈中逐个取出时,将它们复制到另一个Character
s数组中。