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);
    }