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 请给我解释一下与堆栈匹配的分隔符代码 /**测试给定表达式中的分隔符是否正确匹配*/ 公共静态布尔值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(),所以如果你不理解它的作用,难怪你会被吃掉

我能够理解代码,直到为每个循环编写代码。 那之后的台词都在折磨着我

indexOf(“c”)方法用于返回给定字符串中第一次出现c的索引。例如字符串s=“java”; int i=s.indexOf(“a”);
将设置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?
}