我正在尝试使用Stacks编写一个Palindrome类来确定用户输入的单词是否是回文。在我的Palindrome课程中似乎存在问题。有人可以帮我识别一下吗?我的程序有效,但无论我输入什么单词,它都会返回该单词不是回文。
import java.util.Stack;
public class Palindrome
{
public Palindrome()
{
Stack stack = new Stack();
String input = "";
boolean isPalindrome = false;
for(int i = 0; i < input.length(); i++)
{
stack.push(i);
}
String opposite = " ";
while(!stack.isEmpty())
{
opposite = opposite + stack.pop();
}
if(input.equals(opposite))
isPalindrome = true;
else
isPalindrome = false;
}//end main
}//end class Palindrome
这是我的PalindromeCheck课程:
import java.util.Scanner;
public class PalinDromeCheck
{
public static void main(String[] args)
{
Palindrome pal = new Palindrome();
Scanner type = new Scanner(System.in); //create scanner for user to type a word
String word = null; //initial word to check
String stop = null; //stops processing of word
do
{
System.out.println("Enter a word to determine if it is a palindrome: ");
word = type.nextLine(); //user types word
if(pal.equals(word))
System.out.println("is a palindrome");
else
System.out.println("is not a palindrome\n");
System.out.println("Would you like to try another word? Type Y for 'Yes' or N for 'No'");
stop = type.nextLine(); //stops processing
}
while(stop.equalsIgnoreCase("y")); //continues to process and ignores upper or lowercase Y
}
}
答案 0 :(得分:1)
这是你的全Palindrome级吗?如果是,它没有输入处理!
public class Palindrome
{
public static boolean isPalindrome(String input)
{
Stack stack = new Stack();
for(int i = 0; i < input.length(); i++)
{
stack.push(input.charAt(i));
}
String opposite = "";
while(!stack.isEmpty())
{
opposite = opposite + stack.pop();
}
return input.equals(opposite);
}//end main
}//end class Palindrome
这会创建一个静态方法,您可以在代码中使用,如:
System.out.println("Enter a word to determine if it is a palindrome: ");
word = type.nextLine(); //user types word
if(Palindrome.isPalindrome(word))
System.out.println("is a palindrome");
else
System.out.println("is not a palindrome\n");
答案 1 :(得分:1)
你有几个错误。
如果您不需要多次实施Palindrome,则应使用静态方法。
试试这个:
public class Palindrome
{
public static boolean isPalindrome(String input)
{
char[] inputArray = input.toCharArray();
bool isOk = true;
for(int i = 0; i < inputArray.length/2 && isOk; i++){
isOk &= inputArray[i] == inputArray[inputArray.length - i - 1];
}
return isOk;
} // end method
} //end class Palindrome
然后,您的主要功能可能是:
public static void main(String[] args)
{
System.out.println("Enter a word to determine if it is a palindrome: ");
word = type.nextLine(); //user types word
if(Palindrome.isPalindrome(word)) {
System.out.println("is a palindrome");
} else {
System.out.println("is not a palindrome\n");
}
} // End of main
答案 2 :(得分:0)
您的输入为空,因为您在构造函数中将输入设置为“”。最好使用构造函数参数来包含输入,然后使用成员变量跟踪它。
你键入的代码可能更适合在一个方法中(等于也许?你必须覆盖它)。您可能需要考虑将输入字符串中的字符推送到堆栈而不是0,1,2,3 ... n(其中n = input.length() - 1)。
您当前的.equals(word)
没有按照您的想法执行,因为您没有提供过载。