Problema de lógica com ponto flutuante

2 respostas
ucastrobr

No código abaixo onde executa um programinha tipo calculadora onde o programa aleatoriamente leva probleminhas de aritmética para o usuário responder.
Se usuário responde correto recebe mensagem de parabéns, caso contrário deve continuar tentando.
Já tinha postado esse programinha aqui no guj mas como int (um dígito) agora o programinha deve ler e responder em ponto flutuante.
Tentei fazer mas está dando erro de lógica, não sei qual o erro e ainda não aprendi a mexer com big decimal. Veja o código :

import java.util.Scanner;

public class CalculaPontoFlutuante
{
	public static void main ( String args[] )
	{
		int escolha;
		double num1, num2, numero1, numero2, number1, number2, suaResposta;
		double respostaAtual = 0;
		Scanner scan = new Scanner ( System.in );
		
		
		
		do
		{  
        	System.out.println("\n\n-1 - Sair\n 1 - Somar\n 2 - Subtrair\n 3 - Multiplicar\n 4 - Dividir");
			System.out.print("\n\nEscolha uma escolhaeracao: ");
			escolha = scan.nextInt();
			if(escolha==-1){
			System.exit(0);
			}
			num1 = (Math.random() * 9 +1);
			num2 = (Math.random() * 9 +1);
			numero1= (Math.random() *1000);
			numero2= (Math.random() *1000);
			number1= (Math.random()*100);
			number2= (Math.random()*100);
						
			switch(escolha)
			{
				case 1:
				{
					System.out.printf("Quanto é %.1f+ %.1f\n",numero1,numero2);
					respostaAtual=numero1+numero2;
					break;
				}
				
				case 2:
				{
					System.out.printf("Quanto é %.1f- %.1f\n",numero1,numero2);
					respostaAtual=numero1-numero2;
					break;
				}
				
				case 3:
				{
					System.out.printf("Quanto é %.1fx %.1f\n",num1,num2);
					respostaAtual=num1*num2;
					break;
				}
				
				case 4:
				{
					System.out.printf("Quanto é %.1f/ %.1f\n",number1,number2);
					respostaAtual=number1/number2;
					break;
				}
			}
	
        
        System.out.printf("Insira a resposta: ");
        suaResposta = scan.nextDouble();
        
        while(suaResposta!=respostaAtual) {
        System.out.printf("Resposta errada. Digite novamente a resposta\n");
        System.out.printf("Insira a resposta: ");
        suaResposta = scan.nextDouble();
	if (suaResposta==respostaAtual){
	System.out.printf("Parabéns, você acertou\n");
	}
	}
	}
        while(escolha != -1); 
	}	
}

Outra pergunta boba, tem como remover um tópico caso por exemplo ninguém respondeu.

2 Respostas

G

Oi,

O problema está na comparação de dois doubles. A linha…

while(suaResposta!=respostaAtual)

nunca será verdade. Para mais informações dê uma lida nesse artigo.

[]'s

Guilherme…
\o

ucastrobr

Tem algum tutorial, ou livro onde mostra como usar a classe Bigdecimal sem ser a página doc da Sun.

Criado 28 de setembro de 2008
Ultima resposta 28 de set. de 2008
Respostas 2
Participantes 2