使用堆栈的回文 class 问题
Issue with Palindrome class using Stacks
我正在尝试使用 Stacks 编写回文 class 以确定用户输入的单词是否为回文。我的 Palindrome class 似乎有问题。有人可以帮我识别吗?我的程序可以运行,但无论我输入什么词,returns 这个词都不是回文。
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
这是我的回文检查class:
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、2、3...n(其中 n = input.length() - 1)。
您当前的 .equals(word)
没有按照您的想法行事,因为您没有提供过载。
这是你完整的回文-Class吗?如果是,则没有要处理的输入!
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");
你有几个错误。
- 首先,你需要给回文class输入。
- 其次,当您使用堆栈反转输入时,您将索引压入堆栈,而不是字符。
- 第三,在构造函数中做所有事情并不是一个好习惯。回文 class 不需要知道输入作为成员或用于初始化目的
如果不需要多次实现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
我正在尝试使用 Stacks 编写回文 class 以确定用户输入的单词是否为回文。我的 Palindrome class 似乎有问题。有人可以帮我识别吗?我的程序可以运行,但无论我输入什么词,returns 这个词都不是回文。
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
这是我的回文检查class:
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、2、3...n(其中 n = input.length() - 1)。
您当前的 .equals(word)
没有按照您的想法行事,因为您没有提供过载。
这是你完整的回文-Class吗?如果是,则没有要处理的输入!
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");
你有几个错误。
- 首先,你需要给回文class输入。
- 其次,当您使用堆栈反转输入时,您将索引压入堆栈,而不是字符。
- 第三,在构造函数中做所有事情并不是一个好习惯。回文 class 不需要知道输入作为成员或用于初始化目的
如果不需要多次实现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