使用java代码在静态栈的情况下判断字符串是否为回文字符串

这篇博客主要讨论了ArrayStack类的设计,包括入栈、出栈、判空和判满等操作。文章指出在获取栈中元素个数时的错误,应将`return stack.length`更正为`return this.top + 1`。此外,还展示了如何使用栈来判断一个字符串是否是回文,但在遍历出栈元素时,循环条件的错误可能导致无法正确处理最后一个元素。修复这个问题后,代码能正确判断字符串是否为回文。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

package ArrayStack;

public class ArratStack {
    /*
    * 栈的大小
    * */
    private int maxStack;

    /*
    * 使用数组模拟栈
    * */
    private int[] stack;

    /*
    * 表示栈顶位置,默认时栈顶指针为-1
    * 栈顶指针指向栈顶元素位置
    * */
    private int top = -1;

    /*
    * 栈的构造方法,传入参数规定栈的大小
    * */
    public ArratStack(int maxStack) {
        this.maxStack = maxStack;
        stack = new int[maxStack];
    }

    //栈的相关方法有:出栈,入栈,判空,判满

    //判满
    public boolean isFUll(){
        return this.top == this.maxStack-1;
    }

    //判空
    public  boolean isEmpty(){
        return this.top == -1;
    }


    //入栈
    public void push(int var){
        if (isFUll()){
            throw new RuntimeException("栈已经满了");
        }
        stack[++top] = var;
    }

    //出栈
    public int pop(){
        if (isEmpty()){
            throw new RuntimeException("栈是空的");
        }
        return stack[top--];
    }

    //查看栈中所有的元素
    public void list(){
        if (isEmpty()){
            throw new RuntimeException("栈是空的");
        }
        for (int value:stack
             ) {
            System.out.println(value);
        }
    }

    //获取栈中元素的个数
    public int getLength(){
        return stack.length;//应该纠正为return this.top+1;
    }
}
package ArrayStack;
/*
* 通过栈的数据结构来判断一个字符串是否是回文字符串*/
public class Test {
    public static void main(String[] args) {
        Test test = new Test();
        System.out.println(test.detect("abc"));
    }

    public boolean detect(String s){
        ArratStack arratStack = new ArratStack(10);
        for (int i = 0; i < s.length(); i++) {
            arratStack.push(s.charAt(i));
        }
        StringBuilder builder = new StringBuilder();
        for (int i = 0; i < arratStack.getLength(); i++) {//订正为:int length = arratStack.getLength();循环修改为for(..i<length..)
            char c = (char) arratStack.pop();
            builder.append(c);
        }
        if (builder.equals(s)+""){
            return true;
        }else{
        		return false;
        }
    }
}

结果:在这里插入图片描述
原因分析:在获取栈中元素的个数时,使用的是return stack.length,返回的是栈的容量而不是栈中元素的个数,应该改为return this.top+1
还有需要注意的点是,在编写ArrayStack构造方法时,容易忽略创建stack对象既代码stack = new int[maxStack];

修改后运行结果
输入aba
在这里插入图片描述
由debug分析可知,当栈中元素出栈时,循环条件编写错误,arrayStack.getLength()会随着出栈而变化,因此到最后一个字符出栈时不满足循环条件会结束循环导致最后一个元素获取不到。应该单独创建一个int类型的属性作为循环条件。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值