2010-11-28 3 views
0

아래의 코드는 Calculator의 실제 코드에서 가져온 청크입니다. 사용자가 계산기에서 숫자를 누른 다음 "+"를 누르면 텍스트 필드의 숫자가 저장되고 다음 숫자가 눌러집니다. "="누른 다음 "="조건에서 추가 기능이 수행됩니다. 추가 옵션을 수행 한 후 한 번에 더하기와 빼기를 모두 실행하려면 뺄셈을 수행하고 싶습니다. 어떻게 할 것입니까? ???Java 다른 계산기 기본 기능 문제?

if(a.getActionCommand().equals("+")) 
{ 
    q=tf.getText(); 
    x=Integer.parseInt(q); 
} 

if(a.getActionCommand().equals("-")) 
{ 
    b=tf.getText(); 
    t=Integer.parseInt(b); 
} 
if(a.getActionCommand().equals("=")) 
{ 
    p=tf.getText(); 
    y=Integer.parseInt(p); 
    z=x+y; 
    //z=t-y; 
    w=Integer.toString(z); 
    tf.setText(w); 
} 
+1

이 숙제입니까? – st0le

+1

기본적으로 나는 시험을하기 전에 나의 gui 과정을 연습 할 수 있도록 java로 계산기를 만드는 것에 대해 생각해 봤다. – Salar

답변

1

어때요? 음수를 입력으로 받아 들인 다음 추가 하시겠습니까? 아니면 요점을 놓치고 있습니까?

그렇다면 RPN을 사용하면 "="을 사용할 필요가 없습니다. 두 개의 숫자를 입력하면 "+"또는 "-"가 두 피연산자를 스택에서 제거하고 연산자를 적용한 다음 스택에 결과를 다시 표시합니다.

세 번째 방법 : "-"대신에 코드의 사용 :


if(a.getActionCommand().equals("-")) 
{ 
    b=tf.getText(); 
    x=-(Integer.parseInt(b)); 
} 

아니 내가 마지막 제안에 계정에 모든 것을 촬영했습니다 확실하지만 시작입니다.

+0

아니요 다음과 같이하지 마세요. / – Salar

1

계산기는 일반적으로 + 또는 -과 같은 작업을 처리 할 때마다 = 작업을 수행합니다. 사용해보고 지금 컴퓨터에서 calc 응용 프로그램을 열고 3 + 5 - 1을 시도해보십시오. -을 누르면 디스플레이에 8이 표시됩니다. 당신도 당신과 똑같이 할 수 있고 원하는만큼 많은 수의 +-을 연속적으로 처리 할 수 ​​있습니다. 게시 한 코드에는 몇 가지 리팩토링이 필요하며 여기에서 수행 할 수있는 한 가지 방법은 = 작업에 사용하는 프로세스를 메서드 화하는 것입니다. 그런 다음 각 + 또는 - 블록 시작 부분에 해당 performEquals이라고 부를 수 있습니다.

1

jcomeau_ictx가 제안한 스택 기반 알고리즘은 문제에 대한 매우 실용적인 해결책입니다.

두 개의 스택을 만듭니다. 하나는 연산자 (+, -, *, /)를 저장하고 하나는 피연산자 (숫자 0-9 집합)를 저장합니다.

사용자 프레스 지원 : 3 + 4-5

Steps: 

1.) Push '3' into the operand stack 
2.) Push '+' into the operator stack 
3.) Push '4' into the operand stack. 

Since there are at least 2 operands, calculate 3 + 4 (which is 7). 

4.) Pop 3 and 4. Add these two and pop them to the operand stack 
5.) Pop + from the operator stack and push -. 
6.) Push 5 onto the stack. Subtract these two and place result in operand stack. 

일반 알고리즘 :

Push operand (or operator) into the stack 
if (operands > 2 && operator > 0) 
    pop both operands and one operator; 
    calculate result; 
    place result in operand stack; 
    reset operator stack; 
0

난 당신이 4 개 연산 (+, -, ×, ÷)가 있다고 가정하고, 그 이 작업 순서을 구현하지 않는 기본 데스크탑 계산기를 구현하고 있습니다. 이 경우 jcomeau_ictx'sx=-(Integer.parseInt(b))은 곱셈과 나눗셈이 아닌 뺄셈 만 처리 할 수 ​​있으므로 작동하지 않습니다. 이러한 스택 기반 솔루션은 잔인합니다.

무엇이 3 변수입니까 : firstNumber, operationsecondNumber입니다. operation 빈 시작됩니다 (또는 "빈"나타내는 일부 값을 사용하여). 사용자가 =을 명중하면 디스플레이에서 숫자를 가져와 secondNumber에 입력하면됩니다. 그런 다음 3 가지 변수 모두를보고 operation 변수에 표시된대로 수행하십시오.

사용자가 +, -, - 또는 ÷를 치면 먼저 = 연산을 수행합니다 (사용자 입력을 secondNumber에 넣고 operation 변수로 표시된 작업을 수행하십시오). 결과를 firstNumber에 넣으십시오 (원하는 경우 화면에 표시하십시오). 그런 다음 사용자가 operation 변수에 도달 한 작업 (+, -, × 또는 ÷)을 저장하여 다음 번에 작업을 수행 할 수 있습니다. +, -, ×, ÷ 또는 =을 누르십시오.