java - Java:为什么我的程序输出不正确的 else 语句?
问题描述
该程序读取用户输入,例如:(this (is (my))input)
然后迭代语句,在遇到 '(' 时将 '(' 添加到 Stack ,并在遇到 ')' 时从 Stack 中删除 '('。
然后它检查堆栈中是否还有任何内容,并根据特定类型的括号中有多少不匹配打印一条消息
// ********************************************************************
// ParenMatch.java
//
// Determines whether or not a string of characters contains
// matching left and right parentheses.
// ********************************************************************
import java.util.*;
import java.util.Scanner;
public class ParenMatch
{
public static void main (String[] args)
{
Stack<Character> s = new Stack<Character>();
String line; // the string of characters to be checked
Scanner scan = new Scanner(System.in);
System.out.println ("\nParenthesis Matching");
System.out.print ("Enter a parenthesized expression: ");
line = scan.nextLine();
String goodSoFar = "";
// Test: Here is a test (which should work (or maybe it doesn't) )
// loop to process the line one character at a time
for (int i = 0; i < line.length(); i++)
{
char c = line.charAt(i);
goodSoFar += c; // add the character to the string so far
if( c == '(' )
{
// open paren so add it to the stack
s.push( line.charAt(i) );
}
else if ( c == ')' );
{
// hit close paren so pull open paren off the stack
if( s.size() > 0 )
s.pop();
else
{
// stack does not have a matching paren so show an error!
System.out.println("Error! Close parenthesis without a matching open parenthesis!");
System.out.println("Error encountered here: " + goodSoFar + "^");
}
}
}
scan.close();
// check final stack
if( s.size() > 0 )
{
System.out.println("Error! There are " + s.size() + " extra open parenthesis!");
}
else
{
System.out.println("The number of open parenthesis matched the number of close parenthesis!");
}
}
}
我遇到的问题是,当我的输入是:
(this (is (my))input)
然后我的输出是:
Enter a parenthesized expression: (this (is (my))input)
Error! Close parenthesis without a matching open parenthesis!
Error encountered here: (t^
Error! Close parenthesis without a matching open parenthesis!
Error encountered here: (th^
Error! Close parenthesis without a matching open parenthesis!
Error encountered here: (thi^
Error! Close parenthesis without a matching open parenthesis!
Error encountered here: (this^
Error! Close parenthesis without a matching open parenthesis!
Error encountered here: (this ^
Error! Close parenthesis without a matching open parenthesis!
Error encountered here: (this (i^
Error! Close parenthesis without a matching open parenthesis!
Error encountered here: (this (is^
Error! Close parenthesis without a matching open parenthesis!
Error encountered here: (this (is ^
Error! Close parenthesis without a matching open parenthesis!
Error encountered here: (this (is (m^
Error! Close parenthesis without a matching open parenthesis!
Error encountered here: (this (is (my^
Error! Close parenthesis without a matching open parenthesis!
Error encountered here: (this (is (my)^
Error! Close parenthesis without a matching open parenthesis!
Error encountered here: (this (is (my))^
Error! Close parenthesis without a matching open parenthesis!
Error encountered here: (this (is (my))i^
Error! Close parenthesis without a matching open parenthesis!
Error encountered here: (this (is (my))in^
Error! Close parenthesis without a matching open parenthesis!
Error encountered here: (this (is (my))inp^
Error! Close parenthesis without a matching open parenthesis!
Error encountered here: (this (is (my))inpu^
Error! Close parenthesis without a matching open parenthesis!
Error encountered here: (this (is (my))input^
Error! Close parenthesis without a matching open parenthesis!
Error encountered here: (this (is (my))input)^
The number of open parenthesis matched the number of close parenthesis!
但我对该输入的期望输出是:
The number of open parenthesis matched the number of close parenthesis!
解决方案
你在 line 上有一个多余的分号else if ( c == ')' );
,导致后面的块总是运行。
推荐阅读
- javascript - 为什么我的 javascript 在 Safari 而不是 Chrome 中变慢?
- django - 跨域请求被阻止(Ionic + Django)
- arrays - 查找一组数组的所有子集(perl)
- ngx-charts - 如何使用 Ngx-Charts customColor 功能
- postgresql - PostgreSQL 错误:预期没有结果时返回了结果
- shell - 在 $'...' 引用的字符串中扩展变量
- java - 按钮 onClick 不会返回到另一个活动 - Android
- f#-fake - 如何在 F# 中将类型作为函数参数传递?
- multithreading - 关闭时终止多个线程的最佳方法
- php - 如何在 wordpress 中跟踪登录用户最近阅读的文章