Fluxo de Exceção - Classe Calculadora

4 respostas
C

Estou desenvolvimento meus conhecimentos em Java e estou com mais um desafio. Criar uma classe Calculadora, MAS com fluxos de exceção para 3 casos específicos:

  1. só poderá existir números positivos (ex. NumberFormatException)
  2. não poderá existir divisão por número primo (ex. DivisaoPorNumPrimoException)
  3. não poderá existir a multiplicação por números primos. (ex.
    MultiplicacaoPorNumPrimoException)

Pesquisando aqui no grupo achei a classe de um colega e estou estudando ela para aplicar essas exceções. Será que alguém me ajudaria???

import java.util.Scanner;

public class Calculadora {    
    public static void main (String args[]){   
        short operacao;
        double num1, num2;    
        Scanner input = new Scanner(System.in);
        do {
             System.out.println("Digite a operacao desejada:");
             System.out.println("  1. Soma");      
             System.out.println("  2. Subtracao");      
             System.out.println("  3. Multiplicacao");      
             System.out.println("  4. Divisao");      
             System.out.println("  0. Sair");
             System.out.print("Operacao: ");
             operacao = input.nextShort();
             if (operacao == 0) {
            	 System.out.println("Bye bye!");
            	 break;
             }
             if (!OperacaoExiste(operacao)) {
            	 continue;
             }
             System.out.print("Digite o primeiro valor: ");
             num1 = input.nextDouble();
             System.out.print("Digite o segundo valor: ");
             num2 = input.nextDouble();
             if (!ValidaDadosDeEntrada(operacao, num1, num2)) {
            	 continue;
             }
             System.out.println("RESULTADO: O resultado da operacao " + getNomeOperacao(operacao) + " eh " + Calcular(operacao, num1, num2) + "\n");
        } while (operacao != 0);
    }
    static double Calcular (short operacao, double num1, double num2) {
    	double resultado = 0;
    	switch (operacao) {
    		case 1: //soma
    			resultado = num1 + num2;
    			break;
    		case 2: //substração
    			resultado = num1 - num2;
    			break;
    		case 3: //multiplicação
    			resultado = num1 * num2;
    			break;
    		case 4: //divisão
    			resultado = num1 / num2;
    			break;
    	}
    	return resultado;
    }
    static boolean OperacaoExiste (short operacao) {
       	boolean retorno = true;
    	if (operacao > 4) {
       		System.out.println("ERRO: Operacao escolhida eh invalida.\n");
       		retorno = false;
       	}
    	return retorno;
    }
    static boolean ValidaDadosDeEntrada (short operacao, double num1, double num2) {
    	boolean retorno = true; 
    	if (operacao == 4 & num2 == 0) {
        	 System.out.println("ERRO: Divisor nao pode ser zero.\n");
        	 retorno = false;
        }
    	return retorno;
    }
    static String getNomeOperacao (short operacao) {
    	switch (operacao) {
		case 1:
			return "soma";
		case 2:
			return "subtracao";
		case 3: 
			return "multiplicacao";
		case 4: 
			return "divisao";
    	default:
    		return "undefined";
    	}
    }
}

4 Respostas

4mega

Opa blz? Seguinte, o desafio e montar as exceções? Ou vc pode utilizar de funções do tipo try catch para resolve-lo.

4mega

Se qualquer forma, construí seu código, segue ele ae com as 3 exceçoes:

import java.util.Scanner;
public class Calculadora {

public static void main(String args[]) {
    short operacao;
    double num1, num2;
    Scanner input = new Scanner(System.in);
    do {
        System.out.println("Digite a operacao desejada:");
        System.out.println("  1. Soma");
        System.out.println("  2. Subtracao");
        System.out.println("  3. Multiplicacao");
        System.out.println("  4. Divisao");
        System.out.println("  0. Sair");
        System.out.print("Operacao: ");
        operacao = input.nextShort();
        if (operacao == 0) {
            System.out.println("Bye bye!");
            break;
        }
        if (OperacaoExiste(operacao)) {
            System.out.print("Digite o primeiro valor: ");
            num1 = input.nextDouble();
            System.out.print("Digite o segundo valor: ");
            num2 = input.nextDouble();
            if (ValidaDadosDeEntrada(operacao, num1, num2)) { //  só continua se estiver ok
                System.out.println("RESULTADO: O resultado da operacao " + getNomeOperacao(operacao) + " eh " + Calcular(operacao, num1, num2) + "\n");
            }
        }
    } while (operacao != 0);
}

static double Calcular(short operacao, double num1, double num2) {
    double resultado = 0;
    switch (operacao) {
        case 1: //soma
            resultado = num1 + num2;
            break;
        case 2: //substração
            resultado = num1 - num2;
            break;
        case 3: //multiplicação
            resultado = num1 * num2;
            break;
        case 4: //divisão
            resultado = num1 / num2;
            break;
    }
    return resultado;
}

static boolean OperacaoExiste(short operacao) {
    boolean retorno = true;
    if (operacao > 4) {
        System.out.println("ERRO: Operacao escolhida eh invalida.\n");
        retorno = false;
    }
    return retorno;
}

static boolean ValidaDadosDeEntrada(short operacao, double num1, double num2) {
    boolean retorno = true;
    if (num1 < 0 || num2 < 0) { // Verifica se o numero é menor que 0
        System.out.println("ERRO: Numero negativo identificado.\n");
        retorno = false;
    }
    if (operacao == 3 || operacao == 4) { // O "||" significa OU
        if (VerificaNumeroNAOPrimo(num1)) { // verifica se o num1 não é primo
            System.out.println("ERRO: O numero " + num1 + " é primo.\n");
            retorno = false;
        }
        if (VerificaNumeroNAOPrimo(num2)) {// verifica se o num2 não é primo
            System.out.println("ERRO: O numero " + num2 + " é primo.\n");
            retorno = false;
        }
    }
    if (operacao == 4 && num2 == 0) {
        System.out.println("ERRO: Divisor nao pode ser zero.\n");
        retorno = false;
    }

    return retorno;
}

static String getNomeOperacao(short operacao) {
    switch (operacao) {
        case 1:
            return "soma";
        case 2:
            return "subtracao";
        case 3:
            return "multiplicacao";
        case 4:
            return "divisao";
        default:
            return "undefined";
    }
}

static boolean VerificaNumeroNAOPrimo(double num) {
    int primo = 0;
    for (int i = 2; i < num; i++) {
        if (num % i == 0) {
            primo = 1;
        }
    }
    return primo != 0; // Acho q tem um bug neste método, estou sentindo
}

}

Por favor de uma olhada no meu método de Verifica Numeros primos, deve estar errado… mas funciona.

C

Tem que ser criando os métodos e tratando dentro com try catch, throw e delegando as throws… :disappointed:

C

Tem que ser criando os métodos e tratando dentro com try catch, throw e delegando as throws… :disappointed:

Criado 3 de setembro de 2016
Ultima resposta 4 de set. de 2016
Respostas 4
Participantes 2