我正在为我的编程课工作,但我遇到了一些困难,我不知道还能在哪里看。基本上这个问题要求我们编写一个检查回文的程序。
虽然我的循环遇到了一些问题但不知道从哪里开始,有没有人有任何建议或指示?我做错了什么?
这是我到目前为止所拥有的。
import java.util.Stack;
import java.util.regex.*;
import javax.swing.*;
public class Question1 {
static Stack PDrome = new Stack();
public static String Reverse (String input) {
String reverse;
if (input.length() <= 1) {
return input;
}
//pushing onto the stack
for (int i=0; i<input.length();i++) {
PDrome.push(input.charAt(i));
}
//popping from the stack into the string
for (int i=0; i<input.length(); i++) {
PDrome.pop()=reverse.charAt(i);
}
return reverse;
}
//Illegal char check method
public static boolean checker (String input) {
Pattern p = Pattern.compile("[^a-z0-9]", Pattern.CASE_INSENSITIVE);
Matcher m = p.matcher(input);
boolean b = m.find();
if (b) {
System.out.println("There is a special character in your string");
System.exit(0);
}
return b;
}
//Main
public static void main (String [] args) {
//input
String input = JOptionPane.showInputDialog("Enter text to check if it's a palndrome");
//error case
if (input==null); {
System.out.println("Nothing Entered");
System.exit(0);
}
//checking for illegal chars
checker(input);
}
}
答案 0 :(得分:3)
这部分:
String reverse;
...
//popping from the stack into the string
for (int i=0; i<input.length(); i++)
{
PDrome.pop()=reverse.charAt(i);
}
应该是这样的:
String reverse = "";
...
//popping from the stack into the string
for (int i=0; i<input.length(); i++)
{
// appends the popped character to reverse
reverse += PDrome.pop();
}
请注意,当附加大量字符串时,这不是最好的方法,因为Java的字符串是不可变的,并且重复附加字符串需要每次都创建一个新字符串。这个问题很小,但实际上并不重要,但是当问题变大时你会想要使用StringBuffer / StringBuilder。
答案 1 :(得分:2)
PDrome.pop()=reverse.charAt(i);
错了。
你必须从堆栈弹出“ build 。”
所以你应该从一个空字符串开始:reverse = "";
并添加从堆栈中取出的字符:
while (!PDrome.isEmpty())
reverse += PDrome.pop();
命名详情
请使用非大写字母来开始字段和方法名称:
"someIntegerVariable"
"methodForCalculation"
并且只有大写字母来启动类和接口名称:
Stack
ArrayList
MyClass
:)
(来自Java惯例)
答案 2 :(得分:2)
你在这里做什么?
PDrome.pop()=reverse.charAt(i);
您应该使用PDrome.pop()
一次检索一个char
并将其附加到reverse
。
答案 3 :(得分:1)
在我看来,这是一种更清晰的写作方式。这是一种递归方法。
bool isPalindrome(String s)
{
if(s.length() <= 1)
return true;
return s[0] == s[s.length() - 1] && isPalindrome(s.substr(1, s.length() - 2);
}
你可以看到它短得多。