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
}
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 =’))))
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);
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");
}
}
}