2013-12-16 4 views
0

입력이 방정식이고 방정식의 결과를 반환하는 String 인 메소드를 만들고 싶습니다. 이자바에서 문자열의 표현식 평가

String s; 
s = "23*14*(15-4)"; 
System.out.println(ecuation(s)); 

같은

뭔가 내가 방정식을 평가하는 자바 프로그램을 발견,하지만 난 내 요구에 적응하는 방법을 모른다. 누구든지 도울 수 있니?

public class Evaluate { 
    public static void main(String[] args) { 
     Stack<String> ops = new Stack<String>(); 
     Stack<Double> vals = new Stack<Double>(); 

     while (!StdIn.isEmpty()) { 
      String s = StdIn.readString(); 
      if  (s.equals("("))    ; 
      else if (s.equals("+")) ops.push(s); 
      else if (s.equals("-")) ops.push(s); 
      else if (s.equals("*")) ops.push(s); 
      else if (s.equals("/")) ops.push(s); 
      else if (s.equals("sqrt")) ops.push(s); 
      else if (s.equals(")")) { 
       String op = ops.pop(); 
       double v = vals.pop(); 
       if  (op.equals("+")) v = vals.pop() + v; 
       else if (op.equals("-")) v = vals.pop() - v; 
       else if (op.equals("*")) v = vals.pop() * v; 
       else if (op.equals("/")) v = vals.pop()/v; 
       else if (op.equals("sqrt")) v = Math.sqrt(v); 
       vals.push(v); 
      } 
      else vals.push(Double.parseDouble(s)); 
     } 
     StdOut.println(vals.pop()); 
    } 
} 
+0

무엇이 필요합니까? –

+1

이 과정에 기여하려면 프로그램을 보는 것 외에 다른 것을 시도해 봤으면 알려주는 것이 도움이 될 것입니다. 그것을 실행 했습니까? 어떤 입력을 사용 했습니까? 그 결과는 무엇입니까? – user1445967

+0

여기에 게시 한 것은 Evaluate 클래스의 코드입니다. 원하는 것은 String을 입력으로 가져와 Double 값으로 결과를 반환하는 메서드입니다. – CiucaS

답변

1

당신이 (아마도 STDIN에서) 식의 각 토큰을 읽고 그것에 노력하고 발견 Evaluate 프로그램. 당신은 당신이 필요로이 프로그램을 다시 사용한다면

  1. 문자열 표현에서 토큰을 생성하는 것 tokenator 쓰기
    • 즉, "23 * 14 * (15-4)"[ 23, *, 13, *, (, 15, -, 4,) ]의 목록으로 돌아갑니다
  2. 리팩토링 방법 Iterator<String> 및 반복자를 사용하여 next() 메서드가 목록의 다음 토큰을 반환하는 기본 메서드.
  3. 위의 # 1에서 생성 된 목록의 listator()를 # 2의 리팩토링 된 메소드로 전달합니다.

HTH.