Java 请给我解释一下与堆栈匹配的分隔符代码 /**测试给定表达式中的分隔符是否正确匹配*/ 公共静态布尔值isMatched(字符串表达式){ final String opening=“({[”;//开头分隔符 final String closing=“)}]”;//各自的结束分隔符 堆栈缓冲区=新的LinkedStack(); for(char c:expression.toCharArray()){ if(opening.indexOf(c)!=-1)//这是一个左分隔符 缓冲推送(c); else if(closing.indexOf(c)!=-1){//这是一个右分隔符 if(buffer.isEmpty())//没有匹配的内容 返回false; if(closing.indexOf(c)!=opening.indexOf(buffer.pop()) 返回false;//分隔符不匹配 } } return buffer.isEmpty();//是否所有开头分隔符都匹配? } 假设一个通用堆栈接口,stack具有未实现的方法:push(E),pop(),isEmpty(),其中E是通用数据类型 以及一个实现所有堆栈方法的LinkedArray类 “isMatched()”中的“表达式”是以大括号作为分隔符的数学表达式。Ex-[{(a+b)*(c+d)}];及 isMatched(字符串表达式)是一种检查表达式是否包含正确配对的大括号的方法 buffer是一个堆栈,用于存储推式表达式(现在是char的数组)成员
我能够理解代码,直到为每个循环编写代码。 那之后的台词都在折磨着我 indexOf(“c”)方法用于返回给定字符串中第一次出现c的索引。例如字符串s=“java”; int i=s.indexOf(“a”);Java 请给我解释一下与堆栈匹配的分隔符代码 /**测试给定表达式中的分隔符是否正确匹配*/ 公共静态布尔值isMatched(字符串表达式){ final String opening=“({[”;//开头分隔符 final String closing=“)}]”;//各自的结束分隔符 堆栈缓冲区=新的LinkedStack(); for(char c:expression.toCharArray()){ if(opening.indexOf(c)!=-1)//这是一个左分隔符 缓冲推送(c); else if(closing.indexOf(c)!=-1){//这是一个右分隔符 if(buffer.isEmpty())//没有匹配的内容 返回false; if(closing.indexOf(c)!=opening.indexOf(buffer.pop()) 返回false;//分隔符不匹配 } } return buffer.isEmpty();//是否所有开头分隔符都匹配? } 假设一个通用堆栈接口,stack具有未实现的方法:push(E),pop(),isEmpty(),其中E是通用数据类型 以及一个实现所有堆栈方法的LinkedArray类 “isMatched()”中的“表达式”是以大括号作为分隔符的数学表达式。Ex-[{(a+b)*(c+d)}];及 isMatched(字符串表达式)是一种检查表达式是否包含正确配对的大括号的方法 buffer是一个堆栈,用于存储推式表达式(现在是char的数组)成员,java,algorithm,stack,Java,Algorithm,Stack,我能够理解代码,直到为每个循环编写代码。 那之后的台词都在折磨着我 indexOf(“c”)方法用于返回给定字符串中第一次出现c的索引。例如字符串s=“java”; int i=s.indexOf(“a”); 将设置i=1不要插入代码图像的链接。将代码粘贴到问题中。如果行If(opening.indexOf(c)!=-1)正在吞噬你,那么也许你应该阅读的javadoc来了解它的作用以及返回值-1的含义。我的意思是,循环中的代码广泛使用了indexOf(),所以如果你不理解它的作用,难怪你会被吃掉
将设置i=1不要插入代码图像的链接。将代码粘贴到问题中。如果行
If(opening.indexOf(c)!=-1)
正在吞噬你,那么也许你应该阅读的javadoc来了解它的作用以及返回值-1
的含义。我的意思是,循环中的代码广泛使用了indexOf()
,所以如果你不理解它的作用,难怪你会被吃掉。我在用一部小手机。因此,很难键入带有所有缩进的代码;不要继续使用有缺陷的工具,写一个有缺陷的问题。考虑使用一个更好的工具来创建一个更好的问题。除此之外,Andreas说得很对:所有那些java标准库都有优秀的javadoc。哦,对不起,先生。我感谢Andreas和Yoyo帮我解决了疑问。
/** Test if delimiters in the given expression are properly matched. */
public static boolean isMatched(String expression) {
final String opening = "({["; // opening delimiters
final String closing = ")}]"; // respective closing delimiters
Stack<Character> buffer = new LinkedStack<>();
for (char c:expression.toCharArray()) {
if (opening.indexOf(c) != -1) // this is a left delimiter
buffer.push(c);
else if (closing.indexOf(c) != -1) { // this is a right delimiter
if (buffer.isEmpty()) // nothing to match with
return false;
if (closing.indexOf(c) != opening.indexOf(buffer.pop()))
return false; // mismatched delimiter
}
}
return buffer.isEmpty(); // were all opening delimiters matched?
}