Ir ao conteúdo
  • Cadastre-se

Falha em métodos de soma e subtração em calculadora.


Ranan

Posts recomendados

Bom pessoal, eu to apredendo java sozinho, lendo o livro Java Como programar, do Deitel. Aí eu to tentando fazer uma calculadora sozinho, com o conhecimento que ja adquiri ate aqui. Consegui add os botões ao painel, beleza, mas to com um problema nos tratamentos de envento das funções de soma e subtração.

Quando o programa executa a soma, ele faz 9-8 = -1. No caso, o resultado deveria ser 1 e não -1. eu nao sei no que eu estou errando nisso. O outro problema que observei é que quando eu faço 9-8+ (como se eu fosse pegar o resultado da subtração e somar mais um numero a esse resultado), ele mostra 17 no visor, e não 1. No caso, se eu fizer 9-8+1, ele executa: 17+1 e nao 1+1 como deveria ser. Nesse caso da pra observar que o programa executa a ação não quando ele recebe o primeiro sinal do operador, mas sim quando ele recebe o segundo sinal do operadora (nesse caso o sinal de +).

O codigo fonte da função de soma e subtração vem logo em seguida:

/*trata evento do botao soma*/
if (event.getSource() == soma)
for (i=0; i<1; i++)
{
numero = Integer.parseInt (visor.getText())+numero;
output = ""+numero;
visor.setText(output);
ativo = true;
}

/*trata evento do botao subtrai*/
if (event.getSource() == subtrai)
for (i=0; i<1; i++)
{
numero = numero - Integer.parseInt (visor.getText());
numero = -numero;
output = ""+numero;
visor.setText(output);
ativo = true;
}

Aguardo ajuda. Desde já agradeço.

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

O problema está no fato de você associar a soma ou subtração ao pressionamento do botão de soma ou subtração, mas selecionar os valores a serem somados ou subtraídos na ordem errada.

Outro problema também está no trecho de código:

numero = numero - Integer.parseInt (visor.getText());

numero = -numero;

No trecho acima você realizar a subtração corretamente, mas depois inverte o resultado, quando isso não deveria ser feito.

No seu caso está ocorrendo o seguinte:

Vamos supor que eu queira fazer a seguinte operação: 12-1, o seu programa está funcionando da seguinte forma:

Primeiro eu vou digitar 12, e na tela de sua calculadora aparecerá 12. Neste momento, no visor há o número 12, mas a sua variável numero vale 0, pois você não atribuiu 12 a ela.

Depois digitarei o sinal de operação "-". Então será feita a seguinte operação: numero = numero - 12. Como a variável numero até agora ainda vale 0, ela será subtraída de 12 e seu valor será -12, mas depois disso você inseriu o código "numero = -numero", então numero passará a ser 12 novamente.

Logo após apertarei 1, e nada ocorrerá(eu suponho, não posso afirmar com certeza pois não vi o resto do código).

E quando apertar o =, será feita a operação: numero = numero - 1. numero agora vale 12, e ao subtraí-lo de 1 valerá 11. Mas após isso é feita a operação numero = - numero, então numero se torna negativo e seu valor final é -11.

Então para corrigir seu programa são necessárias duas mudanças:

*Remover a operação numero = -numero;

*Elaborar novamente a lógica da calculadora ao pressionar os botões de operação. No caso atual se você faz 9-8+, ele fará a subtração de 0 por 9 e depois inverterá(resultando em 9), e depois fará a soma de 8 com 9. Ou seja, a operação está sendo feita de acordo com o símbolo à direita de cada número por conta da forma como é tratado o evento de clique(primeiro 9 menos o que já tem, depois 8 mais o que já tem).

Pense um pouco em como fazer isso e depois volte aqui dizendo o resultado.;)

Abraços.

Link para o comentário
Compartilhar em outros sites

bom... eu fiz alguma alterações na função de subtração, e melhorou algumas coisas... ja esta fazendo a subtração com numeros naturais normalmente, e também esta fazendo com numeros negativos, por exemplo: 6-7=-1. porém nao estou conseguindo fazer subtrações do numero zero, por exemplo: 0-6=6 e o correto deveria ser: 0-6=-6. O problema dos calculos serem efetuados com os operadores da frente também ainda nao consegui resolver, mas também, porque estou meio sem tempo... (final de ano na faculdade é uma correria) aí eu to fazendo aos poucos... a função de soma continua a mesma...

aí vai o codigo de como ficou a função de subtração depois que eu fiz as melhorias:

/*trata evento do botao subtrai*/
if (event.getSource() == subtrai)
{
numero = Integer.parseInt (visor.getText())-numero;
if (numero==Integer.parseInt (visor.getText()))
{
output = ""+numero;
visor.setText(output);
}

else if (numero<0)
{
numero = -numero;
output = ""+numero;
visor.setText (output);

}
else if (numero==0)
{
output = ""+numero;
visor.setText (output);

}
else
{

numero = -numero;
output = ""+numero;
visor.setText(output);

}
ativo = true;
}

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Acredito que uma forma melhor de fazer sua calculadora seria utilizando um caracter que armazenasse a operação anterior. Dessa forma, ao clicar num sinal de operação ou no igual, seria verificada qual é a operação anterior e ela seria aplicada sobre o número atual.

Por exemplo, no início do programa esse caracter tem o valor '=' por exemplo.

Então você digita 15 e aperta o sinal de soma, este caracter passa a ter o valor '+'.

Depois você digita 4 e pressiona o sinal de subtração, então 15 é somado com 4, e o valor do caracter é atualizado para '-'.

Depois disso você digita 10 e pressiona o sinal de igual, então 19 é subtraído de 10 e o valor do caracter é atualizado para '='.

Dessa forma você garante que sua calculadora sempre fará as operações aplicando as operações nos devidos números, e o código ainda ficará bem mais simples, seria algo como:

if(operacao == '+')
{
numero += valorVisor;
}
else if(operacao == '-')
{
numero -= valorVisor;
}

if (event.getSource() == soma)
{
operacao = '+';
}
else if (event.getSource() == subtrai)
{
operacao = '-';
}
else
{
operacao = '=';
}

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!