Java 循环和堆栈,回文作业
我正在为我的编程课做一项作业,但我遇到了一些困难,我不知道还能去哪里找。基本上,这个问题要求我们编写一个程序来检查回文Java 循环和堆栈,回文作业,java,palindrome,stack,Java,Palindrome,Stack,我正在为我的编程课做一项作业,但我遇到了一些困难,我不知道还能去哪里找。基本上,这个问题要求我们编写一个程序来检查回文 用户输入文本(不允许使用非字母数字字符。) 将字符串一次推入堆栈中一个字符 每次从堆栈中提取一个字符,从而反转字符串 如果原文与反面相同,我们就有一个回文 虽然我的循环遇到了一些问题,但我不知道该怎么办,有人有什么建议或建议吗?我做错了什么 这是我到目前为止所拥有的 import java.util.Stack; import java.util.regex.*; impo
- 用户输入文本(不允许使用非字母数字字符。)
- 将字符串一次推入堆栈中一个字符
- 每次从堆栈中提取一个字符,从而反转字符串
- 如果原文与反面相同,我们就有一个回文
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);
}
}
import java.util.Stack;
导入java.util.regex.*;
导入javax.swing.*;
公开课问题1{
静态堆栈PDrome=新堆栈();
公共静态字符串反转(字符串输入){
字符串反转;
如果(input.length()PDrome.pop()=reverse.charAt(i);
是错误的
反向为null->NullPointerException
是否为函数赋值?(pop())
你必须从堆栈中弹出来构建反向
因此,您应该从一个空字符串开始:reverse=“”;
并添加从堆栈中获取的字符:
while (!PDrome.isEmpty())
reverse += PDrome.pop();
命名详细信息
请使用非大写字母开始字段和方法名称:
"someIntegerVariable"
"methodForCalculation"
并且仅以大写字母开头的类和接口名称:
Stack
ArrayList
MyClass
:)
(来自Java约定)本部分:
String reverse;
...
//popping from the stack into the string
for (int i=0; i<input.length(); i++)
{
PDrome.pop()=reverse.charAt(i);
}
字符串反转;
...
//从堆栈中弹出到字符串中
对于(inti=0;i你到底在这里干什么
PDrome.pop()=reverse.charAt(i);
您应该使用PDrome.pop()
一次检索一个char
,并将其附加到reverse
在我看来,这是一种更简洁的编写方法。这是一种递归方法
bool isPalindrome(String s)
{
if(s.length() <= 1)
return true;
return s[0] == s[s.length() - 1] && isPalindrome(s.substr(1, s.length() - 2);
}
bool isPalindrome(字符串s)
{
如果(s.length()啊啊啊啊啊啊!我知道我做错了什么,在我的头脑中是有道理的,但我看不出它是怎么错的。另外,谢谢你的介绍methods@Eogcloud-考虑使用String Bu建器而不是连接字符——已经习惯了好的实践:(String CONTAT将导致在每个CONTAT上分配新的字符串对象!)是的,为了让大家了解我的想法,这几乎比任何东西都要假代码,不过我知道我错了!我会记住这一点,谢谢你的回复。这帮了大忙!+1:对于StringBuffer
的建议。有一件事:StringBuffer是同步的。因为Java 5有StringBuilder
。它是相同的,但没有同步,所以它是同步的对于单线程需求来说,它更好,比如在方法内部将其用作局部变量(大多数情况下)。
bool isPalindrome(String s)
{
if(s.length() <= 1)
return true;
return s[0] == s[s.length() - 1] && isPalindrome(s.substr(1, s.length() - 2);
}