Exercício simples - Calculadora usando o console do java

Ola pessoal, estou aqui brincando um pouco com o Java.
Na tentativa de criar uma calculadora, porem estou com algumas duvidas. Gostaria de dar uma otimizada neste código. Reduzir o numero de linhas repetidas também se possivel.

Se puderem me ajudar, desde ja eu agradeço…

Aqui vai o código



import java.util.Scanner;


public class Calc {
	/*Declaração dos métodos*/
	public int som(int num1, int num2) {
	  
		return num1 + num2;
		
	}
	public int sub(int num1, int num2){
	   
		return num1 - num2;
		
	}
	public int div(int num1,int num2){
	    
		return num1 / num2;
		
	}
	public int mult(int num1, int num2){
	     
		return num1 - num2;
		
	}
	
	
	
	public static void main (String args[]){
		
		//criando um objeto c a apartir do metodo calc
		Calc c = new Calc();
		
		//declarando as varíaveis
		int opcao = 5;
		int num1;
		int num2;
		
	      Scanner input = new Scanner(System.in);  
	      
	      
		System.out.println("-Escolha uma opção-");
	    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.println("Operação: ");  
	    
	    opcao = input.nextInt();
	    
	    while (opcao != 0) {
	    	
	    
	    	if (opcao == 1) {
	    		///???????
	    		/**Que outra maneira poderia ser recebido 
	    		 * os numeros, sem que se repita as próximas 
	    		 * linhas para todas operações**/
	    		
	    		
	    	    Scanner input1 = new Scanner(System.in);  
	  	      
	    		System.out.println("Qual o primeiro numero: ");
	    		 num1 = input1.nextInt();
	    		System.out.println("Qual o segundo numero: ");
	    		 num2 = input1.nextInt();
	    		 
	    		 /***/
	    			int operacao = c.som(num1, num2);
	    			
	    			System.out.println(operacao);
	    		break;
	    	}
	    	 	if (opcao == 2) {
		    		
	    	 		  Scanner input1 = new Scanner(System.in);  
	    	  	      
	  	    		System.out.println("Qual o primeiro numero: ");
	  	    		 num1 = input1.nextInt();
	  	    		System.out.println("Qual o segundo numero: ");
	  	    		 num2 = input1.nextInt();
	  	    			int operacao = c.sub(num1, num2);
	  	    			
	  	    			System.out.println(operacao);
		    		
		    		break;
		    		}
		    	 	if (opcao == 3) {
		    	 		  Scanner input1 = new Scanner(System.in);  
		    	  	      
		  	    		System.out.println("Qual o primeiro numero: ");
		  	    		 num1 = input1.nextInt();
		  	    		System.out.println("Qual o segundo numero: ");
		  	    		 num2 = input1.nextInt();
		  	    			int operacao = c.mult(num1, num2);
		  	    			
		  	    			System.out.println(operacao);
			    		break;
		    	 	}
			    	 	if (opcao == 4) {
			    	 		  Scanner input1 = new Scanner(System.in);  
			    	  	      
			  	    		System.out.println("Qual o primeiro numero: ");
			  	    		 num1 = input1.nextInt();
			  	    		System.out.println("Qual o segundo numero: ");
			  	    		 num2 = input1.nextInt();
			  	    			int operacao = c.div(num1, num2);
			  	    			
			  	    			System.out.println(operacao);
				    		break;
				    		}
			    	 	else{
					    		System.out.println("????");
					    		break;
					    		}
				    
	    }
	}
}
	    

As linhas 64 a 68, se repetem varias vezes ao longo do programa…

tentei usa-las direto nos métodos (som, sub, div e mult) porem não consegui rodar o programa dessa forma pois as variáveis não podiam ser inicializadas

Acredito que teria que usar getters e setters para alterar estes valores
caso as linhas… Focem implantadas dentro dos métodos.

[code]
Scanner input1 = new Scanner(System.in);

    		System.out.println("Qual o primeiro numero: ");
    		 num1 = input1.nextInt();
    		System.out.println("Qual o segundo numero: ");
    		 num2 = input1.nextInt();
    		 [/code]

Olá, bom primeiro encontrei um erro no metodo mult, ao inves de retornar multiplicação está retornando subtração. Veja:

public int mult(int num1, int num2){
        return num1- num2;
    }

[size=18]Acho que seu código ficaria menor, mais limpo, e melhor assim:[/size]

import java.util.Scanner;  
  
  
public class Calc {  
    /*Declaração dos métodos*/  
    public int som(int num1, int num2) {
        return num1 + num2;
    }  
    public int sub(int num1, int num2){
        return num1 - num2;
    }  
    public int div(int num1,int num2){
        return num1 / num2;
    }  
    public int mult(int num1, int num2){
        return num1 * num2;
    }  
    
    // --------------- Metodo principal
    
    public static void main (String args[]){ 
        //criando um objeto c a apartir do metodo calc  
        Calc c = new Calc();  
          
        //declarando as varíaveis  
        int opcao = 5;  
        int num1;  
        int num2;  
          
		Scanner input = new Scanner(System.in);
        System.out.println("-Escolha uma opção-");  
        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.println("Operação: ");    
          
        opcao = input.nextInt();  
          
        while (opcao != 0) {
			Scanner input1 = new Scanner(System.in);    
			
			System.out.println("Qual o primeiro numero: ");  
			num1 = input1.nextInt();  
			System.out.println("Qual o segundo numero: ");  
			num2 = input1.nextInt();
			
			if ( opcao == 1 ) {
				int operacao = c.som(num1, num2);
                System.out.printf("\nO resultado da soma é: %d\n", operacao);  
                break;  
            }  
            else if (opcao == 2) { 
				int operacao = c.sub(num1, num2);
				System.out.printf("\nO resultado da subtração é: %d\n", operacao);  
				break;  
			}  
			else if (opcao == 3) {
				int operacao = c.mult(num1, num2); 
				System.out.printf("\nO resultado da multiplicação é: %d\n", operacao);    
				break;  
			}  
			else if (opcao == 4) {  
				int operacao = c.div(num1, num2);  
				System.out.printf("\nO resultado da divisão é: %d\n", operacao);   
				break;  
			}  
			else{  
				System.out.println("????");  
				break;  
			}      
        } // fim do while - usuario optou por sair
    }  // fim do metodo principal
}  

[size=18]Ajudei?[/size]

1 curtida

Olá johnnyboy!

Se me permite… me empolguei e entrei na brincadeira também ='D, segue minha sugestão:

import java.util.Scanner;    
public class calc {    
    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";
    	}
    	
    }
} 

Você pode tirar um monte de “firulas” que coloquei e fazer o básico apenas e com certeza ficará com menos linhas que a sua versão, mas também pode deixar as “firulas” e ficar assim =’))))

Abraços!

2 curtidas

Pode ser sem utilizar o conceito ideial de orientação objeto?
Se puder, segue abaixo a ideia em poucas linhas.

Aproveito o ensejo e peço que os mais experientes comente sobre o código no qual desenvolvi. Está certo o modo de pensar, ou realmente nesse caso deveria ter usado o conceito de orientação objeto?

Abraço.

[code]import java.util.*;

public class Calc {
static double resultado;

public static void main(String[] args) {
   
Scanner sc=new Scanner(System.in);
System.out.println ("Digite o número 01: ");
double num1=sc.nextDouble();
System.out.println ("Digite o número 02: ");
double num2=sc.nextDouble();
System.out.print("Escolha uma das opções: \n 01: Somar \n 02: Subtrair \n 03: Multiplicar  \n 04: Dividir: \n Opção escolhida: ");
int num3= sc.nextInt();

switch (num3)
{

    case 1:
        resultado = num1+num2;
        break;
    case 2:
        resultado = num1-num2;
        break;
    case 3:
        resultado = num1*num2;
        break;
    case 4:
        resultado = num1/num2;
        break;
        
}
System.out.println("Resultado igual a: "+ resultado);

}
}[/code]

Esqueci de colocar uma verificação para caso digite um valor diferente dos permitidos.

Segue abaixo a correção:

import java.util.*;

public class Calc {
static double resultado; 
    
    public static void main(String[] args) {
       
    Scanner sc=new Scanner(System.in);
    System.out.println ("Digite o número 01: ");
    double num1=sc.nextDouble();
    System.out.println ("Digite o número 02: ");
    double num2=sc.nextDouble();
    System.out.print("Escolha uma das opções: \n 01: Somar \n 02: Subtrair \n 03: Multiplicar  \n 04: Dividir: \n Opção escolhida: ");
    int num3= sc.nextInt();
    if(num3<5 && num3>0)
    {
    switch (num3)
    {

        case 1:
            resultado = num1+num2;
            break;
        case 2:
            resultado = num1-num2;
            break;
        case 3:
            resultado = num1*num2;
            break;
        case 4:
            resultado = num1/num2;
            break;
            
    }
    System.out.println("Resultado igual a: "+ resultado);
}
    else
    {
        System.out.println("Reinicie o programa e insira um número entre 1 a 4. \nObrigado pela compreensão");
    }

    }
}

Abaixo mais uma opção.

public class CalculadoraConsole {
	public static void main(String[] args) {
		Scanner s  = new Scanner(System.in);
		double num[] = new double[2];
		
		System.out.print(&quot;Escolha uma das opções: \n 1: Somar \n 2: Subtrair \n 3: Multiplicar  \n 4: Dividir: \n Opção escolhida:&quot;);
		int escolha = s.nextInt();
		// Condição para validar escolha do usuario
		if(escolha &gt; 0 && escolha &lt; 5){
			for (int i = 0; i &lt; num.length; i++) {
				System.out.print(&quot;Informe o &quot; + (i+1) +&quot;º número: &quot;);
				num[i] = s.nextDouble();
			}
			
			switch(escolha){
			case 1:
				System.out.println(&quot;Resultado da soma: &quot; + (num[0]+num[1]));
				break;
			case 2:
				System.out.println(&quot;Resultado da subtração: &quot; + (num[0]-num[1]));
				break;
			case 3:
				System.out.println(&quot;Resultado da multiplicação: &quot; + (num[0]*num[1]));
				break;
			case 4:
				System.out.println(&quot;Resultado da divisão: &quot; + (num[0]/num[1]));
				break;
			}
		} else {
			System.out.println(&quot;Opção inválida. Tente Novamente!\n&quot;);
			main(args);
		}
	}
}

Obrigado pessoal

Baaaaaah, tava muito na cara a solução, a primeira resposta foi show…

as outras tb (kkk)


System.out.println("Vocês são D+");

Valeu mesmo !!

Se puderem deêm uma olhada neste outro tópico também

Att. JohnnyBoy

package com.guj.simples;

import java.util.Scanner;

enum Operacao {
	SOMA(1), SUBTRACAO(2), MULTIPLICACAO(3), DIVISAO(4);

	private int codigo;

	Operacao(int codigo) {
		this.codigo = codigo;
	}

	public int getCodigo() {
		return codigo;
	}
}

final class CalculadoraUtils {

	private CalculadoraUtils() { // Classe Utilitária

	}

	public static final Number calcular(int a, int b, Operacao operador) {
		if (operador.equals(Operacao.SOMA))
			return a + b;
		else if (operador.equals(Operacao.SUBTRACAO))
			return a - b;
		else if (operador.equals(Operacao.MULTIPLICACAO))
			return a * b;
		else
			return a / (double) b;

	}

}

public class Calculadora {
	private static Scanner input = new Scanner(System.in);

	public static void main(String[] args) {
		int num1, num2;
		Operacao operador;

		while (true) {
			System.out.println("-Escolha uma opção-");
			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("Operação: ");
			int opcao = input.nextInt();
			if (opcao == 0)
				break; // Condicao de parada
			try {
				operador = getOperador(opcao);
			} catch (IllegalArgumentException e) {
				System.err.println(e.getMessage());
				continue;
			}
			System.out.print("Qual o primeiro numero: ");
			num1 = input.nextInt();
			System.out.print("Qual o segundo numero: ");
			num2 = input.nextInt();
			System.out.println(CalculadoraUtils.calcular(num1, num2, operador));
		}
	}

	private static Operacao getOperador(int codigo) {
		switch (codigo) {
		case 1:
			return Operacao.SOMA;
		case 2:
			return Operacao.SUBTRACAO;
		case 3:
			return Operacao.MULTIPLICACAO;
		case 4:
			return Operacao.DIVISAO;
		default:
			throw new IllegalArgumentException("Código de Operação Inválido");
		}
	}

}

cara tem como fazer esse seu codigo ter parenteses???

Muito obrigado!! sua dia me ajudou bastante!! eu fiz desta forma.
import java.util.Scanner;

public class CalculadoraCientifica {
public static void main(String[] args) {

    short escolha;
    double numeroUm, numeroDois;
    Scanner sc = new Scanner(System.in);

    do {
        System.out.println("-----------------------------");
        System.out.print("Digite um Numero: ");
        numeroUm = sc.nextDouble();
        System.out.print("Digite outro Numero: ");
        numeroDois = sc.nextDouble();


        System.out.println("O que voce deseja fazer: ");
        System.out.println("Escolha uma alternativa: ");
        System.out.println("[1]----SOMAR");
        System.out.println("[2]----SUBTRAIR");
        System.out.println("[3]----MULTIPLICAR");
        System.out.println("[4]----DIVIDIR");
        escolha = sc.nextShort();

        double PROD = 0;
        if (escolha == 1){
            PROD = numeroUm + numeroDois;
            System.out.println("Voce escolheu SOMAR, o seu resultado é...");
            System.out.println(numeroUm+ " + "+numeroDois +" = "+ PROD);
        }
        if ( escolha == 2){
            PROD = numeroUm - numeroDois;
            System.out.println("Voce escolheu SUBTRAIR. o seu resultado é...");
            System.out.println(numeroUm+ " - "+numeroDois +" = "+ PROD);
        }
        if (escolha == 3) {
            PROD = numeroUm *numeroDois;
            System.out.println("Voce escolheu MULTIPLICAR,  o seu resultado é ...");
            System.out.println(numeroUm+ " X "+numeroDois +" = "+ PROD);
        }
        if (escolha == 4) {
            PROD = numeroUm / numeroDois;
            System.out.println("Voce escolheu DIVIDIR, o seu resultado é...");
            System.out.println(numeroUm+ " : "+numeroDois +" = "+ PROD);
        }
        System.out.println("-----------------------------");
        System.out.println("Você deseja continuar: ");
        System.out.println("[1]----SIM ");
        System.out.println("[0]----NÃO ");
        escolha = sc.nextShort();
        if(escolha == 0){
            System.out.println("-----------------------------");
            System.out.println("MUITO OBRIGADO POR PARTICIPAR!!");
            break;
        }
    } while(escolha != 0);
}

}