2012-10-09 3 views
0

다른 항목들 중 중괄호 {}, 대괄호 [] 및 괄호()가 포함 된 표현식을 읽는 Java 프로그램을 작성해야합니다. 내 프로그램이 올바르게 입력되어 있어야합니다. 중첩 된 '' '' '' '' '' '' '' '' '' '' '와 일치해야합니다. 프로그램 시작 부분에'$ ' 선. 이는 내 프로그램의 샘플 실행 있어야됩니다괄호, 중괄호 및 괄호를 읽는 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 

사람이 날이를 출력 내 드라이버 프로그램을 개발하는 데 도움 주실 래요 샘플 예제와 비슷한 출력? 도움을 주시면 감사하겠습니다. 감사! 경우 문 checkExpression의 방법에서

+0

그래서 명령 행 io에 도움이 필요합니까? – dngfng

+0

대괄호 쌍이 일치하지 않을 때 인쇄하려면 checkExpression 메소드를 수정하십시오. – nhahtdh

+0

** Input ** StreamReader 및 BufferedReader를 사용하여 표현식을 출력 ** 출력 ** 설정하는 데 문제가 있습니다. 이 부분을 이해할 수 없으며 사용자에게 몇 가지 텍스트를 표시하려고합니까? – Gianmarco

답변

0

사용하는

stExpression.equals()

싶은 것은 상단에있는 값에 '슬쩍'에있는 동안 스택.

값을 팝하는 간단한 방법을 추가하여 다시 푸시하여 문제 (적어도이 부분)를 해결해야합니다.

0

위의 검사를 매우 쉽게 수행 할 수있는 아주 간단한 예입니다. 우리는 Stack 클래스를 Java로 제공하므로 프로그램을 매우 쉽게 만들 수 있습니다. 이 질문에 대한 간단한 코드를 찾으십시오 :

package com.test; 

import java.util.Scanner; 
import java.util.Stack; 

public class StackChar { 

    public static void main(String[] args) { 

     Scanner sc = new Scanner(System.in); 

     System.out.println("Enete an expression : "); 
     String expr = sc.nextLine(); 

     if(checkvalidExpression(expr)){ 
      System.out.println("The Expression '"+expr+"' is a valid expression!!!"); 
     } 
     else{ 
      System.out.println("The Expression '"+expr+"' is a NOT a valid expression!!!"); 
     } 

    } 

    public static boolean checkvalidExpression(String expr){ 

     Stack<Character> charStack = new Stack<Character>(); 

     int len = expr.length(); 
     char exprChar = ' '; 

     for(int indexOfExpr = 0; indexOfExpr<len; indexOfExpr++){ 
      exprChar = expr.charAt(indexOfExpr); 

      if(exprChar == '(' || exprChar == '{' || exprChar == '['){ 
       charStack.push(exprChar); 
      } 
      else if(exprChar == ')' && !charStack.empty()){ 
       if(charStack.peek() == '('){ 
        charStack.pop(); 
       } 
      } 
      else if(exprChar == '}' && !charStack.empty()){ 
       if(charStack.peek() == '{'){ 
        charStack.pop(); 
       } 
      } 
      else if(exprChar == ']' && !charStack.empty()){ 
       if(charStack.peek() == '['){ 
        charStack.pop(); 
       } 
      } 

      else if(exprChar == ')' || exprChar == '}' || exprChar == ']'){ 
       return false; 
      } 

     } 
     if(!charStack.empty()) 
      return false; 

     return true; 

    } 

}