0
문자열 표현식을 읽고 괄호로 먼저 구문 분석하기 위해 메인에 메소드를 생성해야합니다.자바에서 메인 읽기 문자열 표현식에있는 메소드
표현은 다음과 같습니다
(3+4)*7/2
그것은 가지고는 자바에서 수행 할 수 있습니다. 그러나 나는 그것을 어떻게하는지 모른다.
아이디어가 있으십니까?
문자열 표현식을 읽고 괄호로 먼저 구문 분석하기 위해 메인에 메소드를 생성해야합니다.자바에서 메인 읽기 문자열 표현식에있는 메소드
표현은 다음과 같습니다
(3+4)*7/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");
처럼, js
및 javascript
로 시도, JavaScript
을 포함하지 않는 경우 귀하의 표현을 평가하기 위해
나는이 코드를 시도했지만 컴파일되지 않았으며, (double)이되어서는 안됩니다 (Double)? Double은 Object를 확장하지만 double은하지 않습니다. –
@Richtea 왜 컴파일되지 않는지 모르겠지만, 내 PC에서는 문제없이 컴파일됩니다. ScriptException가 발생했을 경우는 true,없는 경우는 JRE의 「Script」가 등록되어있는 ScriptEngine가 아닙니다. 사용 가능한 스크립트 엔진을 나열하는 방법을 알고 싶으면 내 업데이트를 참조하십시오. – BackSlash
(이중)으로 변경하면 (이중) netbeans 내 PC에서 문제없이 실행됩니다. 스레드 "main"의 예외 java.lang.RuntimeException : 컴파일 할 수없는 소스 코드 - 변환 불가능한 유형 필수 : double 발견 : java.lang.Object \t at test.ScratchSpace.main (Test) .java : 22) Java 결과 : 1 –