括号匹配算法 java_java括号匹配算法

本文介绍了Java实现括号匹配算法,通过一个Stack类处理括号的入栈和出栈,检查括号是否匹配。在IDE中,这种算法用于实时检测代码中的括号匹配问题。文章提供了完整的代码示例,并附有简单的解释。

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

我们经常在各种IDE(集成开发环境)中敲代码。

现在的IDE非常智能,并会给出相应提示,还有及时的错误提醒。

其中有一项就是括号匹配的检测。

今天我们来谈一谈其中的原理。

先上图

871df2d5c03d?utm_source=oschina-app

图片发自简书App

再上代码

import java.io.BufferedReader;i

mport java.io.InputStreamReader;

import java.util.Scanner;

class Stack{

char [] data;int maxSize;//数组的长度int top;Scanner input=new Scanner(System.in);public Stack(int maxSize) {this.maxSize=maxSize;data=new char[maxSize];top=-1;

/*注意:因为数组下标是从0开始的,一开始top为-1就表示栈为空。*/

}

public int getSize()

{

return maxSize;

}

public int getElementCount()

{

//得到栈顶元素标号

return top;

}

public boolean isEmpty()

//判断是否为空栈 {

return top==-1;

}

public boolean isFull()

{

return top+1==maxSize;

//数组下标从0开始,所以这里top要先加1

}public boolean push(char data)

{

if(isFull()) {

System.out.println("栈已满");

return false;

}

this.data[++top]=data;/*这里的表达式(++top)的值是原来top+1 并且top的值从此已经加1,因为已经入栈了一次。* / return true;

}

public char pop() throws Exception

{if(isEmpty())

{

throw new Exception("栈已空");

}

return this.data[top--];/*这里(top--)的值仍然是原来top的值,并且从此top的值已经减1。因为已经弹栈了一次。*/

}public char peek()

{//查看当前栈顶元素return this.data[getElementCount()];

}

public void pipei() throws Exception {char ch,temp;

//定义输入的字符和接收弹出的字符变量int match;//是否匹配的标志BufferedReader reader=new BufferedReader(new InputStreamReader(System.in));

ch=(char)reader.read();

while(ch!='0')

{

if(getElementCount()==-1)

{

push(ch);

}else {

temp=pop();//取出栈顶元素

match=0;

if(temp=='('&&ch==')')

{

match=1;

}

if(temp=='')

{match=1;}

if(temp=='{'&&ch=='}')

{match=1;}

if(temp=='['&&ch==']')

{match=1;}

if(match==0)

{push(temp);push(ch);}

/*注意,如果match为1,那么被取出的栈顶元素是不会被重新入栈的。*/

}

ch=(char)reader.read();

}

if(getElementCount()==-1)

{

System.out.println("匹配!");

/*while循环结束后,判断栈是否为空,若为空说明每次取出栈顶的元素都与输入的括号相匹配 */}

else

{System.out.println("不匹配!");

}

}

}

public class bracketsMatchAlrogithm {/*这里为了简单,就直接在主函数中抛出异常,实际中不要这么做。* / public static void main(String[] args) throws Exception{String go;Scanner input=new Scanner(System.in);Scanner input2=new Scanner(System.in);System.out.println("请输入最大字符容量");Stack s=new Stack(input.nextInt());System.out.println("括号匹配");do {System.out.println("请输入一组括号组合,以0表示结束");s.pipei();System.out.println("继续?(y/n)");go=input.nextLine();}while(go.equalsIgnoreCase("y"));System.out.println("游戏结束");input.close();input2.close();}}

以上内容是本人学习之后的总结,注释和画图均为本人所做,画图技术不好。。。难免粗糙,体谅一下,嘿嘿。

另外,本人水平有限,难免有缺漏和不足,望各位大侠指出啊!thankyou very much

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值