Dúvida com programinha tipo calculadora

1 resposta
ucastrobr

Estou num exercício que pede um programa tipo calculadora, onde o usuário escolhe se quer adição, subtração, multiplicação ou divisão.
Após o usuário escolher o programa aleatóriamente traz probleminhas de matemática para o usuário responder.
O usuário recebe mensagens de parabéns se a resposta estiver correta, se estiver errada a resposta o usuário recebe mensagem de erro e pede novamente para o usuário dar a resposta.
Até aí tudo bem, eu consegui.
O problema é que o usuário pode escolher se quer que esses problemas de aritmética seja dado somente com números de um dígito ou escolher com dois dígitos.
Supondo que com um dígito seja (int) e dois dígitos seja (double). Segue o código abaixo feito somente com um dígito.
Qual a melhor maneira de fazer com dois dígitos? Seria deixar o código abaixo Classe Calculadora formulado com OO (Orientado a objeto) e criar uma nova classe tipo CalculadoraDoisDigitos para o de ponto flutuante em um novo programa? Fundindo depois as duas classe numa classe de teste?Ou tem como fazer no mesmo código abaixo sem comprometer a legibilidade?

import java.util.Scanner;

public class Calculadora
{
	public static void main ( String args[] )
	{
		int escolha, num1, num2, numero1, numero2, number1, number2, suaResposta;
		int 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 = (int)(Math.random() * 9 +1); //para gerar números aleatório para tabuada de 1 a 10
			num2 = (int)(Math.random() * 9 +1);
			numero1= (int)(Math.random() *1000);//para gerar números aleatórios para soma e subtração
			numero2= (int)(Math.random() *1000);
			number1= (int)(Math.random()*100); //para gera números aleatórios para divisão
			number2= (int)(Math.random()*100);
						
			switch(escolha)
			{
				case 1:
				{
					System.out.printf("Quanto é %d + %d \n",numero1,numero2);
					respostaAtual=numero1+numero2;
					break;
				}
				
				case 2:
				{
					System.out.printf("Quanto é %d - %d \n",numero1,numero2);
					respostaAtual=numero1-numero2;
					break;
				}
				
				case 3:
				{
					System.out.printf("Quanto é %d x %d \n",num1,num2);
					respostaAtual=num1*num2;
					break;
				}
				
				case 4:
				{
					System.out.printf("Quanto é %d / %d \n",number1,number2);
					respostaAtual=number1/number2;
					break;
				}
			}
	
        
        System.out.printf("Insira a resposta: ");
        suaResposta = scan.nextInt();
        
        while(suaResposta!=respostaAtual) {
        System.out.printf("Resposta errada. Digite novamente a resposta\n");
        System.out.printf("Insira a resposta: ");
        suaResposta = scan.nextInt();
	}
	if (suaResposta==respostaAtual){
	System.out.printf("Parabéns, você acertou\n");
	}
	}
        while(escolha != -1); 
	}	
}

1 Resposta

ruilima
ucastrobr:
Estou num exercício que pede um programa tipo calculadora, onde o usuário escolhe se quer adição, subtração, multiplicação ou divisão. Após o usuário escolher o programa aleatóriamente traz probleminhas de matemática para o usuário responder. O usuário recebe mensagens de parabéns se a resposta estiver correta, se estiver errada a resposta o usuário recebe mensagem de erro e pede novamente para o usuário dar a resposta. Até aí tudo bem, eu consegui. O problema é que o usuário pode escolher se quer que esses problemas de aritmética seja dado somente com números de um dígito ou escolher com dois dígitos. Supondo que com um dígito seja (int) e dois dígitos seja (double). Segue o código abaixo feito somente com um dígito. Qual a melhor maneira de fazer com dois dígitos? Seria deixar o código abaixo Classe Calculadora formulado com OO (Orientado a objeto) e criar uma nova classe tipo CalculadoraDoisDigitos para o de ponto flutuante em um novo programa? Fundindo depois as duas classe numa classe de teste?Ou tem como fazer no mesmo código abaixo sem comprometer a legibilidade?
import java.util.Scanner;

public class Calculadora
{
	public static void main ( String args[] )
	{
		int escolha, num1, num2, numero1, numero2, number1, number2, suaResposta;
		int 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 = (int)(Math.random() * 9 +1); //para gerar números aleatório para tabuada de 1 a 10
			num2 = (int)(Math.random() * 9 +1);
			numero1= (int)(Math.random() *1000);//para gerar números aleatórios para soma e subtração
			numero2= (int)(Math.random() *1000);
			number1= (int)(Math.random()*100); //para gera números aleatórios para divisão
			number2= (int)(Math.random()*100);
						
			switch(escolha)
			{
				case 1:
				{
					System.out.printf("Quanto é %d + %d \n",numero1,numero2);
					respostaAtual=numero1+numero2;
					break;
				}
				
				case 2:
				{
					System.out.printf("Quanto é %d - %d \n",numero1,numero2);
					respostaAtual=numero1-numero2;
					break;
				}
				
				case 3:
				{
					System.out.printf("Quanto é %d x %d \n",num1,num2);
					respostaAtual=num1*num2;
					break;
				}
				
				case 4:
				{
					System.out.printf("Quanto é %d / %d \n",number1,number2);
					respostaAtual=number1/number2;
					break;
				}
			}
	
        
        System.out.printf("Insira a resposta: ");
        suaResposta = scan.nextInt();
        
        while(suaResposta!=respostaAtual) {
        System.out.printf("Resposta errada. Digite novamente a resposta\n");
        System.out.printf("Insira a resposta: ");
        suaResposta = scan.nextInt();
	}
	if (suaResposta==respostaAtual){
	System.out.printf("Parabéns, você acertou\n");
	}
	}
        while(escolha != -1); 
	}	
}

Fala ucastrobr, cara a sua pergunta é um tanto interesante. Mas acredito que em termos de acoplamento e coesão seria melhor você criar uma nova classe para ponto flutuante, assim a manutenção desse código ficaria mais simples.

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