2013-10-19 4 views
0

그래서 스택 및 중위 어에서 Postfix 로의 작업을 할당 받았습니다. 이제 Postfix 계산에 중위 점이 있지만 ..이 부분에는 4 개의 난수와 임의의 연산자를 계산해야한다고 나와 있습니다.자바에서 문자열 변수의 합계를 계산하십시오.

그래서 숫자 배열이 1-9이고 +, - 및 *로 구성된 char 배열이 있습니다.

임의의 계산을 수행하여 문자열 개체에 넣을 수는 있지만 계산을 Integer 변수에 적절한 방법으로 저장할 수는 없습니다. 연산자의 적절한 우선 순위와 함께 .. 나는 몇 가지 Switch 및 If-else 문을 시도했지만 더 이상 출구를 찾을 수 없습니다.

나는 주어진 Stack 및 InToPost 클래스가 있습니다.

계산은 코드에서 다음과 같습니다

String calculation = Integer.toString(numbers[random.nextInt(9)]) 
      + Character.toString(operators[random.nextInt(2)]) 
      + Integer.toString(numbers[random.nextInt(9)]) 
      + Character.toString(operators[random.nextInt(2)]) 
      + Integer.toString(numbers[random.nextInt(9)]) 
      + Character.toString(operators[random.nextInt(2)]) 
      + Integer.toString(numbers[random.nextInt(9)]); 

내가 지금 원하는 것은 그것을 계산하는 것입니다,하지만 * 연산자의 우선 순위가 어렵다.

모든 도움을 받으실 수 있습니다.

답변

-1

감사합니다. 그러나 나는 그것을하는 아주 간단한 방법을 발견했다. Postfix 계산기에 중위어요? 그래서 저는 무작위 계산을 만들어 문자열에 넣었습니다.

중위 어> 후위 변환기를 사용하여 후미 만듭니다. 그런 다음 스택에서 접미사 계산의 번호를 누르고 연산자에서 팝업하고 연산자가 + 인 경우 접미사를 함께 추가합니다. 후위에서 이것은 당신을 위해 이미 완료 되었기 때문에 연산자의 우선 순위에 대해서는 아무런 관심이 없습니다! : D

희망이 사람들을 도울 것입니다 :) 나는 필요하면 postfix 계산기에 중위를 게시 할 수 있습니다!

0

String을 교환 원으로 변환 할 수 없습니다. 원하는 것을 얻으려면 방법이 필요합니다. 에 this link이 도움이 될 수있는 예입니다.

어쨌든 C#에서는 원하는대로 할 수 있습니다.

+0

감사합니다. – Burbanana

+0

기본적으로'if (op == '*') {/ * int에 대해 왼쪽에 int를 곱하고 * /} else if ...'라고 말하고 싶습니다. – Radiodef

6

각 노드가 작업이고 리프가 값인 트리로 데이터를 구문 분석하면 작업 순서를보다 쉽게 ​​구현할 수 있습니다. 우선 순위가 가장 높은 작업을 가장 낮게 설정하고 아래쪽으로 실행하십시오. 모든 유용한 팁들에 대한

enter link description here

+0

이것은 기본적으로 질문에 대한 정답입니다. OP, PEMDAS 기반의 계산 (String Input을 기반으로하는 내가 생각하는 가정)은 실제로 간단한 작업이 아닙니다. 모든 단계에서 구문 분석해야하며, 기본적으로 가장 안쪽의 가장 우선 순위가 높은 연산자를 찾은 다음 매번 결과를 계산 한 후 매번 바깥으로 이동해야합니다. 이 사용자가 제안하는 것처럼 재구성 할 수 있다면 도움이되지만 여전히 간단하지는 않습니다. – Radiodef

+0

정말 좋은 팁 주셔서 감사합니다, 나는 필요할 때 이것을 사용합니다. 내가 한 일은 스택을 만들고 내 계산의 후위 값을 사용하여 답을 계산하는 것입니다. D – Burbanana

관련 문제