JAVA:括号匹配方法未打印

JAVA:括号匹配方法未打印,java,algorithm,search,Java,Algorithm,Search,嘿,我正在做一个编程作业,我们必须匹配字符串中的括号。我们必须输出如下错误消息: 样本I/O: 输入要测试的字符串: ()]> 错误:“>”与“{”不匹配。 我试图用isBalanced()方法打印此消息,但是它不会打印System.out.println(),但是它到达了它所在的代码块(否则它将永远不会返回false)。我认为问题在于我的主方法,但我已经尝试了一段时间,我被难倒了! 感谢您的帮助。 谢谢 凯尔 导入java.io.BufferedReader; 导入java.io.IOExce

嘿,我正在做一个编程作业,我们必须匹配字符串中的括号。我们必须输出如下错误消息:

样本I/O:

输入要测试的字符串: (<[{}({>)]>

错误:“>”与“{”不匹配。

我试图用isBalanced()方法打印此消息,但是它不会打印System.out.println(),但是它到达了它所在的代码块(否则它将永远不会返回false)。我认为问题在于我的主方法,但我已经尝试了一段时间,我被难倒了! 感谢您的帮助。 谢谢

凯尔

导入java.io.BufferedReader;
导入java.io.IOException;
导入java.io.InputStreamReader;
导入java.util.EmptyStackException;
import java.util.Stack;//在本例中使用java的默认堆栈,因为它有更多无关的错误检查
公开课问题3{
私有静态最终字符串OPEN=“([{”;
公共静态void main(字符串[]args)引发IOException{
BufferedReader inKb=新的BufferedReader(新的InputStreamReader(
系统(in),;
System.out.println(“输入测试字符串:”);
字符串输入=inKb.readLine();
布尔成功=isBalanced(输入);
System.out.println(成功);
}
公共静态void打印错误(字符ch,应为字符){
System.out.println(“错误:'”+ch+“'与“”不匹配”
+预期为+“'”;
}
专用静态布尔等参线(字符括号){
返回打开。indexOf(括号)>=0;
}
私有静态布尔值是封闭的(字符括号){
返回关闭。indexOf(括号)>=0;
}
私有静态布尔匹配(char openBracket、char closedBracket){
返回OPEN.indexOf(openBracket)=CLOSED.indexOf(closedBracket);
}
公共静态布尔值isBalanced(字符串输入){
堆栈=新堆栈();
试一试{
对于(int i=0;i
中的

ch
是结束符,
corBracket
是开始符。您需要反转它们

if (!matches(corBracket, ch)) {
匹配方法语义

private static boolean matches(char openBracket, char closedBracket) {
    boolean value = OPEN.indexOf(openBracket) == CLOSED.indexOf(closedBracket);
    return value;
}
matches
方法中使用描述性名称。在其他任何地方都应该使用相同的名称。

ch
是结束符,
corBracket
是开始符。您需要反转它们

if (!matches(corBracket, ch)) {
匹配方法语义

private static boolean matches(char openBracket, char closedBracket) {
    boolean value = OPEN.indexOf(openBracket) == CLOSED.indexOf(closedBracket);
    return value;
}

matches
方法中使用描述性名称。在其他任何地方都应该使用相同的名称。

这是一个使用调试器的示例

使用输入
(<)
调试应用程序时,告诉我
!matches(ch,corBracket)
的计算结果为
false
,因此您的if语句被忽略。这使我们相信您的
matches(char,char)
方法不正确

如果尝试将
匹配方法更改为以下内容:

private static boolean matches(char openBracket, char closedBracket) {
  int i1 = OPEN.indexOf(openBracket);
  int i2 = CLOSED.indexOf(closedBracket);

  return (i1 == i2);
}
您将在调试器中看到,
i1
i2
都是
-1
(在没有出现的情况下,
indexOf
的返回值),并且由于
-1==-1
的计算结果为true,
!(-1=-1)
的计算结果为
false
,正如预期的那样


希望这有帮助。

这是一个使用调试器的示例

使用输入
(<)
调试应用程序时,告诉我
!matches(ch,corBracket)
的计算结果为
false
,因此您的if语句被忽略。这使我们相信您的
matches(char,char)
方法不正确

如果尝试将
匹配方法更改为以下内容:

private static boolean matches(char openBracket, char closedBracket) {
  int i1 = OPEN.indexOf(openBracket);
  int i2 = CLOSED.indexOf(closedBracket);

  return (i1 == i2);
}
您将在调试器中看到,
i1
i2
都是
-1
(在没有出现的情况下,
indexOf
的返回值),并且由于
-1==-1
的计算结果为true,
!(-1=-1)
的计算结果为
false
,正如预期的那样


希望这能有所帮助。

您正在查找
关闭的
中的打开制动器和
打开的
中的关闭括号

你需要改变

 return OPEN.indexOf(openBracket) == CLOSED.indexOf(closedBracket);
进入

或者只是交换通话中的参数

matches(corBracket, ch)
而不是

matches(ch, corBracket)

调试到该函数的调用中会显示
OPEN.indexOf(openBracket)
return
-1
开关非常可疑,因为您希望找到您正在搜索的内容,即大于或等于0且小于OPEN.length()的索引

您正在查找
关闭的
中的打开制动器和
打开的
中的关闭括号

你需要改变

 return OPEN.indexOf(openBracket) == CLOSED.indexOf(closedBracket);
进入

或者只是交换通话中的参数

matches(corBracket, ch)
而不是

matches(ch, corBracket)

调试到该函数的调用中会显示
OPEN.indexOf(openBracket)
return
-1
开关非常可疑,因为您希望找到您正在搜索的内容,即大于或等于0且小于OPEN.length()的索引

还有另一种返回false的方法:如果捕获到EmptyStackException,或者如果到达了方法的结尾,则stack.isEmpty()为false。尝试使用print语句查看是否发生了这两种情况。在捕获EmptyStackException中添加sysout,以便可以