-1

中括弧 { }、大括弧 [ ]、および括弧 ( ) などを含む式を読み取る Java プログラムを作成することになっています。プログラムは適切にネストされ、'(' は ')' に、'[' は ']' に、'{' は '}' に一致する必要があります。プログラムは、入力行の先頭にある '$' で終了する必要があります。これらは私のプログラムのサンプル実行であるはずです:

Enter an Expression:
A[F + X {Y – 2}] 
The expression is Legal

Enter an Expression: 
B+[3 – {X/2})*19 + 2/(X – 7) 
ERROR—‘]’ expected 

Enter an Expression:
()) ( 
ERROR--‘)’ without ‘(‘ 
$

BalancedExpression というクラスと ExpressionChecker というドライバーを作成しました。BalancedExpression クラスを修了しました。しかし、InputStreamReader と BufferedReader を使用して式を出力するようにドライバーを設定するのに問題があります。私が理解できた唯一のことは、ユーザーに $.

これまでの私のコードは次のとおりです。

バランスの取れた表現クラス:

public class BalancedExpression
{
public BalancedExpression() // Default Constructor
{
  sp = 0; // the stack pointer
  theStack = new int[MAX_STACK_SIZE]; 
} 

public void push(int value) // Method to push an expression into the stack
{ 
  if (!full()) 
    theStack[sp++] = value; 
} 

public int pop() // Method to pop an expression out of the stack
{ 
  if (!empty()) 
    return theStack[--sp]; 

  else 
    return -1;  
} 

public boolean full() // Method to determine if the stack is full
{ 
  if (sp == MAX_STACK_SIZE) 
    return true; 

  else 
    return false; 
} 

public boolean empty() // Method to determine if the stack is empty
{ 
  if (sp == 0) 
    return true; 

  else 
    return false; 
} 

public static boolean checkExpression(String ex) // Method to check Expression in stack
{
    BalancedExpression stExpression = new BalancedExpression();
    for(int i = 0; i<  MAX_STACK_SIZE; i++)
    {
        char ch = ex.charAt(i);
        if(ch == '(' || ch == '{' ||  ch == '[')
            stExpression.push(ch);
        else if(ch == ')' && !stExpression.empty() && stExpression.equals('('))
            stExpression.pop();
        else if(ch == '}' && !stExpression.empty() && stExpression.equals('{'))
            stExpression.pop();
        else if(ch == ']' && !stExpression.empty() && stExpression.equals('['))
            stExpression.pop();
        else if(ch == ')' || ch == '}' ||  ch == ']' )
            return false;
    }
    if(!stExpression.empty())
        return false;
    return true;
}

private int sp; 
private int[] theStack; 
private static final int MAX_STACK_SIZE = 6;

}// End of class BalancedExpression

マイ ドライバー プログラム:

import java.io.BufferedReader;
import java.io.InputStreamReader;

public class ExpressionChecker
{

public static void main(String[] args) 
{
    InputStreamReader reader = new InputStreamReader(System.in); 
    BufferedReader console = new BufferedReader(reader); 

    BalancedExpression exp = new BalancedExpression();
    String expression = "";

    do
    {
        try{
        System.out.print("Enter an Expression: ");
        expression = console.readLine();

        if("$".equals(expression)) 
            break;

        }catch(Exception e){
            System.out.println("IO error:" + e);
        }

    }while(!expression.equals(""));// End of while loop
}
}// End of class ExpressionChecker

サンプル例と同様の出力を出力するドライバ プログラムの開発を手伝ってくれる人はいますか? どんな助けでも大歓迎です。ありがとう!

4

2 に答える 2

0

使用しているcheckExpressionメソッドのifステートメント

stExpression.equals()

やりたいことは、スタックの一番上の値を「覗く」ことです。

値をポップし、プッシュバックして返す単純なメソッドを追加すると、問題が解決するはずです(少なくともこの部分)。

于 2012-10-09T10:48:09.863 に答える