2013-04-25 2 views
0

문자열 표현식을 읽고 괄호로 먼저 구문 분석하기 위해 메인에 메소드를 생성해야합니다.자바에서 메인 읽기 문자열 표현식에있는 메소드

표현은 다음과 같습니다
(3+4)*7/2

그것은 가지고는 자바에서 수행 할 수 있습니다. 그러나 나는 그것을 어떻게하는지 모른다.

아이디어가 있으십니까?

답변

2

이 시도 :

ScriptEngineManager mgr = new ScriptEngineManager(); 
ScriptEngine engine = mgr.getEngineByName("JavaScript"); 
String foo = "(3+4)*7/2"; 
double result=0; 
try { 
    /* 
    It seems that (on some platforms) this results in a java.lang.RuntimeException 
    because of converting Object to double, so let's replace it with 
    Double.doubleValue() 
    */ 
    //result = (double) (engine.eval(foo)); 
    result = ((Double) (engine.eval(foo))).doubleValue(); //result = 24.5 
} catch (ScriptException e) { 
    //handle exception here 
} 

UPDATE

당신이 표현을 평가하려고하기 전에 "자바 스크립트"의 ScriptEngine가 시스템에 등록되어있는 경우, 당신은 테스트해야합니다, 당신은 이런 식으로 작업을 수행 할 수 있습니다 :

ScriptEngineManager manager = new ScriptEngineManager(); 
List<ScriptEngineFactory> factories = manager.getEngineFactories(); 
for (ScriptEngineFactory factory : factories) { 
    System.out.println(factory.getNames()); 
} 

내 출력은

입니다
[js, rhino, JavaScript, javascript, ECMAScript, ecmascript] 

당신의 출력은 그 중 어느 것도 당신이 스크립트 엔진과 같은 JS를 사용할 수있는 경우 다음

ScriptEngine engine = mgr.getEngineByName("js"); 

또는

ScriptEngine engine = mgr.getEngineByName("javascript"); 

처럼, jsjavascript로 시도, JavaScript을 포함하지 않는 경우 귀하의 표현을 평가하기 위해

+0

나는이 코드를 시도했지만 컴파일되지 않았으며, (double)이되어서는 안됩니다 (Double)? Double은 Object를 확장하지만 double은하지 않습니다. –

+0

@Richtea 왜 컴파일되지 않는지 모르겠지만, 내 PC에서는 문제없이 컴파일됩니다. ScriptException가 발생했을 경우는 true,없는 경우는 JRE의 「Script」가 등록되어있는 ScriptEngine가 아닙니다. 사용 가능한 스크립트 엔진을 나열하는 방법을 알고 싶으면 내 업데이트를 참조하십시오. – BackSlash

+0

(이중)으로 변경하면 (이중) netbeans 내 PC에서 문제없이 실행됩니다. 스레드 "main"의 예외 java.lang.RuntimeException : 컴파일 할 수없는 소스 코드 - 변환 불가능한 유형 필수 : ​​double 발견 : java.lang.Object \t at test.ScratchSpace.main (Test) .java : 22) Java 결과 : 1 –