Ajuda - Exercicio simples em Java

27 respostas
viniciusglanert

Bom dia a todos!

Galera, sou novato em Java mas estou gostando muito da linguagem.
Li e estudei já bastante sobre a linguagem mas a prática me confunde muito!

Então recorri ao Fórum da GUJ para ver se vocês podem me dar um empurrão em um exercicio aleatório que escolhi para fazer.

Seria mais ou menos o seguinte.

Uma classe Somar. valor1+valor2
Uma classe Subtração. valor1-valor2
Uma classe Multiplicação. valor1*valor2
Uma classe Divisão. valor1/valor2

E a classe principal Operação, que realizaria os calculos apartir de um if.

No caso usaria um if para como “Digite 1 para fazer uma soma\nDigite 2 para fazer uma subtração\nDigite 3 para fazer uma multiplicação\nDigite 4 para fazer uma divisão”

Será que fui claro?

Acredito que não deve ser tãooo simples assim, to quebrando a cabeça e até agora nada…

Obrigado desde já! :smiley:

27 Respostas

C

Olá viniciusglanert, na realidade, o ideal é você utilizar uma classe chamada operacao e dentro dessa classe você criar os métodos somar, subtrair, multiplicar e dividir, e uma classe principal, com a funçao main, para efetuar essas operações.

Ex: Operacao.java

public class Operacao {
   public void somar(double v1, double v2){}
   public void subtrair(double v1, double v2){}
   public void dividr(double v1, double v2){}
   public void multiplicar(double v1, double v2){}
}

Ex. Principal.java

public class Principal{
   public static void main(String ...){
       //Aqui você cria sua instância de Operacao e chama os métodos
   }
viniciusglanert

Muito obrigado meu amigo!

Vou tentar fazer aqui no NetBeans e posto o resultado

Grato! (y’

C

Só corrigindo, o retorno dos métodos não deve ser void e sim, double, os métodos retornam o resultado da operacao, e na sua classe principal vc as imprime na tela.

viniciusglanert

To compreendendo melhor agora, mas ainda não estou conseguindo imprimir na tela atraves da classe principal…

Dá uma olhada no codigo

package calcular;


public class Operacao {
double resultado[];

public double somar (double valor1, double valor2){
resultado[0]=valor1+valor2;
return resultado[0]; }

public double subtrair (double valor1, double valor2){
resultado[1]=valor1-valor2;
return resultado[1]; }

public double multiplicar (double valor1, double valor2){
resultado[2]=valor1*valor2;
return resultado[2]; }

public double dividir (double valor1, double valor2){
resultado[3]=valor1/valor2;
return resultado[3]; }

}
package calcular;

import javax.swing.JOptionPane;


public class Calcular {

   
    public static void main(String[] args) {
        
    int opc;
    Operacao operacao=new Operacao();

   opc= Integer.parseInt(JOptionPane.showInputDialog(null,"Digite uma opção:\n1- somar\n2- subtrair\n3- Multiplicar\n4- Dividir ","OPERAÇÃO",JOptionPane.PLAIN_MESSAGE));

   if(opc==1){
  operacao.resultado[0]=JOptionPane.showInputDialog(null,"O Resultado é"+resultado[0],"OPERAÇÃO",JOptionPane.PLAIN_MESSAGE));
     }

   if(opc==2){
     }


O erro está na linha 17, não consigo achar a sintaxe correta "/
   if(opc==3){
     }

   if(opc==4){
     }
    }

}
davidbuzatto

Oi Vinícius,

Primeiro vamos à classe Operacao.
Você não precisa do array que você está declarando e mesmo se precisasse, vc precisaria instanciá-lo primeiro, o que você não está fazendo.
Enfim, dê uma olhada abaixo:

public class Operacao {

    public double soma( double n1, double n2 ) {
        return n1+n2;
    }

}

Escreva os outros 3 métodos e poste para a gente continuar ;)

renzonuccitelli

Olhe esse Tópico. Nele foi discutido justamente esse caso de Calculadora OO.

[]s

Lucas_Abbatepaolo

viniciusglanert,
seu codigo esta muito errado…
vc tera q revelo praticamente inteiro…

viniciusglanert

Opa, no fundo, bem no fundo eu já esperava ter que refazer todo código de novo hehehe
Mas fico muito agradecido, pois estou aqui para aprender ^^

Certo, está aqui então, refeito, os métodos da classe operação:

package calcular;


public class Operacao {

public double somar (double valor1, double valor2){
return valor1+valor2; }

public double subtrair (double valor1, double valor2){
return valor1-valor2; }

public double multiplicar (double valor1, double valor2){
return valor1*valor2; }

public double dividir (double valor1, double valor2){
return valor1/valor2; }

}
renzonuccitelli

Chegou a ver o tópico que mandei (3 posts atrás)? Assim como o autor daquele tópico, o código está um pouco procedural demais. Tente aplicar o conceito de polimorfismo já que java é OO.

[]s

Lucas_Abbatepaolo
viniciusglanert:
Opa, no fundo, bem no fundo eu já esperava ter que refazer todo código de novo hehehe Mas fico muito agradecido, pois estou aqui para aprender ^^

Certo, está aqui então, refeito, os métodos da classe operação:

package calcular;


public class Operacao {

public double somar (double valor1, double valor2){
return valor1+valor2; }

public double subtrair (double valor1, double valor2){
return valor1-valor2; }

public double multiplicar (double valor1, double valor2){
return valor1*valor2; }

public double dividir (double valor1, double valor2){
return valor1/valor2; }

}

cmo certeza...esse é o objetivo aqui..
nos ajudar...

e como ficou sua classe main?

viniciusglanert

Não consegui modificar a Main "/

Como tinha dito, apartir de lá, não sei como puxar o método pra ser impresso…

Lucas_Abbatepaolo

Vou te dr as dicas…

dentro da classe main…vc ira instanciar um objejo da classe Operacao

Operacao op = new Operacao()

depois para fazer os calculos vc chama os metodos passando os parametros necessarios

double resultado = op.somar(valor1, valor2);

agora é so exibir o resultado…

qlq duvida posta ai…

Att.,

viniciusglanert

Certo Lucas, agradeço muito a paciencia!

Ta dando erro na classe Main

package calcular;

import javax.swing.JOptionPane;


public class Calcular {

   
    public static void main(String[] args) {
        
    int opc;
    
    Operacao operacao=new Operacao();

   opc= Integer.parseInt(JOptionPane.showInputDialog(null,"Digite uma opção:\n1- somar\n2- subtrair\n3- Multiplicar\n4- Dividir ","OPERAÇÃO",JOptionPane.PLAIN_MESSAGE));

   if(opc==1){
       double resultado= operacao.somar(valor1,valor2); //Erro aqui <- Cannot find Symbol

//  operacao=JOptionPane.showInputDialog(null,"O Resultado é"+somar"OPERAÇÃO",JOptionPane.PLAIN_MESSAGE));
     }

   if(opc==2){
     }

   if(opc==3){
     }

   if(opc==4){
     }
    }

}
Lucas_Abbatepaolo

a sua classe nao conhece a variavel valor1 e valor2.

eu coloquei no exemplo…valor1 e valor2
mais na sua classe main ou vc deve ter:

exemplo:

int valor1 = 5;
int valor2 = 6;

op.soma(valor1, valor2) //passa as variaveis como parametro
renzonuccitelli

Vejam o sétimo post desse tópico aqui. Nele eu coloquei o passo a passo de uma calculadora OO com polimorfismo.

viniciusglanert

Booa meu amigo!

Agradeço a todos consegui finalizar o programa!
Não se está da melhor maneira possivel mas está funcionando, fiquei muito contente hehe

Vou mandar pra vocês, analizem e aceito dicas e criticas õ/

package calcular;

import javax.swing.JOptionPane;


public class Calcular {

   
    public static void main(String[] args) {

    int opc;

    Operacao operacao=new Operacao();

   opc= Integer.parseInt(JOptionPane.showInputDialog(null,"Digite uma opção:\n1- somar\n2- subtrair\n3- Multiplicar\n4- Dividir ","OPERAÇÃO",JOptionPane.PLAIN_MESSAGE));

   if(opc==1){
      double valor1 = Double.parseDouble(JOptionPane.showInputDialog("Digite o primeiro valor: "));
      double valor2 = Double.parseDouble(JOptionPane.showInputDialog("Digite o segundo valor: "));
      double resultado= operacao.somar(valor1,valor2);
      JOptionPane.showMessageDialog(null,"A soma é igual a: "+resultado,"RESULTADO SOMA",JOptionPane.PLAIN_MESSAGE);
             }

   if(opc==2){
      double valor1 = Double.parseDouble(JOptionPane.showInputDialog("Digite o primeiro valor: "));
      double valor2 = Double.parseDouble(JOptionPane.showInputDialog("Digite o segundo valor: "));
      double resultado= operacao.subtrair(valor1,valor2);
      JOptionPane.showMessageDialog(null,"A subtração é igual a: "+resultado,"RESULTADO SUBTRAÇÃO",JOptionPane.PLAIN_MESSAGE);
     }

   if(opc==3){
      double valor1 = Double.parseDouble(JOptionPane.showInputDialog("Digite o primeiro valor: "));
      double valor2 = Double.parseDouble(JOptionPane.showInputDialog("Digite o segundo valor: "));
      double resultado= operacao.multiplicar(valor1,valor2);
      JOptionPane.showMessageDialog(null,"A multiplicação é igual a: "+resultado,"RESULTADO MULTIPLICAÇÃO",JOptionPane.PLAIN_MESSAGE);
     }

   if(opc==4){
      double valor1 = Double.parseDouble(JOptionPane.showInputDialog("Digite o primeiro valor: "));
      double valor2 = Double.parseDouble(JOptionPane.showInputDialog("Digite o segundo valor: "));
      double resultado= operacao.dividir(valor1,valor2);
      JOptionPane.showMessageDialog(null,"A divisão é igual a: "+resultado,"RESULTADO DIVISÃO",JOptionPane.PLAIN_MESSAGE);
     }
    }

}
package calcular;


public class Operacao {

public double somar (double valor1, double valor2){
return valor1+valor2; }

public double subtrair (double valor1, double valor2){
return valor1-valor2; }

public double multiplicar (double valor1, double valor2){
return valor1*valor2; }

public double dividir (double valor1, double valor2){
return valor1/valor2; }

}

Obrigado pela paciência!

(Próxima missão - interface gráfica para a calculadora hehe)

Lucas_Abbatepaolo

é por ai msm…

so acho q ao invers de usar if vc poderia usar o switch…

modifica seu codigo …vc ja vai aprender + alguma coisa…

Att.,

pmlm

Já reparaste que dentro dos ifs tens sempre as mesmas duas linhas? Talvez isso seja sinal que elas poderiam estar antes dos ifs e não dentro…

Lucas_Abbatepaolo

bem notado…passei despercebi por isto…

Att.,

renzonuccitelli

O problemas dos ifs se resolvem com polimorfismo e um mapa. Essa calculadora está muito procedural. Mas como o autor está contente com o resultado e já atingiu o objetivo, blz.

davidbuzatto

Então, parece que o Vinicius está começando ainda.
Encher a cabeça dele com vários conceitos não vai ajudar nada, só atrapalhar, visto que ele ainda está no início.
Falar de polimorfismo para quem ainda não entende direito o que é um método e como o retorn funciona fica complicado :wink:

[]´s

A

Eu recomendo você dar uma focada de tipo uma semana só no conceito antes de por a mão da massa... Vide o que você pediu:

/**
 * Classe com todas as operações matemáticas do projeto
 * 
 * @author André AS
 * */
public class OperacaoMatematica {

	/**
	 * Método soma
	 * 
	 * @param Valor1
	 * @param Valor2
	 * @return resultado da soma dos dois valores
	 * */
	int soma(int valor1, int valor2) {
		int resultado = valor1 + valor2;
		System.out.println(resultado);
		return resultado;
	}

	/**
	 * Método multiplica
	 * 
	 * @param Valor1
	 * @param Valor2
	 * @return resultado da multiplicação dos dois valores
	 * */
	int multiplica(int valor1, int valor2) {
		int resultado = valor1 * valor2;
		System.out.println(resultado);
		return resultado;
	}

	/**
	 * Método de divisão
	 * 
	 * @param Valor1
	 * @param Valor2
	 * @return resultado da divisão do valor2 pelo valor1
	 * */
	int dividi(int valor1, int valor2) {
		int resultado = valor1 / valor2;
		System.out.println(resultado);
		return resultado;
	}

	/**
	 * Método de subtração
	 * 
	 * @param Valor1
	 * @param Valor2
	 * @return resultado da divisão do valor2 pelo valor1
	 * */
	int subtrai(int valor1, int valor2) {
		int resultado = valor2 - valor1;
		System.out.println(resultado);
		return resultado;
	}
}
 
/**
 * Classe responsável por testar todas as operações matemáticas do projeto
 * 
 * @author André AS
 * */
class Principal {
	public static void main(String[] args) {
			/*Criada instância/um Objeto da classe OperacaoesMatematicas*/
		OperacaoMatematica operacoesMatematicas = new OperacaoMatematica();
	
		/*Escolhendo qual método/operações matemática usar*/
		 operacoesMatematicas.dividi(10, 2);
		 
		 /*Escolhendo qual método/operações matemática usar*/
		 operacoesMatematicas.soma(10, 2);
		 
		 /*Escolhendo qual método/operações matemática usar*/
		 operacoesMatematicas.multiplica(10, 2);
		 
		 /*Escolhendo qual método/operações matemática usar*/
		 operacoesMatematicas.dividi(10, 2);
	
		//Ou você pode implementar mais ou menos assim: (se 1 for diferente de 1 ele vai somar o que daria 2, como 1 é igual a 1 o resultado será 1, a multiplicação)
		/* if(1 != 1){
			 operacoesMatematicas.soma(1, 1);
		 }
		 else{
			 operacoesMatematicas.multiplica(1, 1);
		 }*/
	
	}
	
	
	
	
}
A

Outro detalhe, eu focaria só no Eclipse ferramenta de mercado…

A

Na verdade pode tb ser void sim, veja:

/** * Método soma * * @param Valor1 * @param Valor2 * @return resultado da soma dos dois valores * */ void soma(int valor1, int valor2) { int resultado = valor1 + valor2; System.out.println(resultado); }

A
viniciusglanert:
To compreendendo melhor agora, mas ainda não estou conseguindo imprimir na tela atraves da classe principal..

Dá uma olhada no codigo

package calcular;


public class Operacao {
double resultado[];

public double somar (double valor1, double valor2){
resultado[0]=valor1+valor2;
return resultado[0]; }

public double subtrair (double valor1, double valor2){
resultado[1]=valor1-valor2;
return resultado[1]; }

public double multiplicar (double valor1, double valor2){
resultado[2]=valor1*valor2;
return resultado[2]; }

public double dividir (double valor1, double valor2){
resultado[3]=valor1/valor2;
return resultado[3]; }

}
package calcular;

import javax.swing.JOptionPane;


public class Calcular {

   
    public static void main(String[] args) {
        
    int opc;
    Operacao operacao=new Operacao();

   opc= Integer.parseInt(JOptionPane.showInputDialog(null,"Digite uma opção:\n1- somar\n2- subtrair\n3- Multiplicar\n4- Dividir ","OPERAÇÃO",JOptionPane.PLAIN_MESSAGE));

   if(opc==1){
  operacao.resultado[0]=JOptionPane.showInputDialog(null,"O Resultado é"+resultado[0],"OPERAÇÃO",JOptionPane.PLAIN_MESSAGE));
     }

   if(opc==2){
     }


O erro está na linha 17, não consigo achar a sintaxe correta "/
   if(opc==3){
     }

   if(opc==4){
     }
    }

}

Veja como guardar no array depois:

class Principal {
	public static void main(String[] args) {
		/*Criada instância/um Objeto da classe OperacaoesMatematicas*/
		OperacaoMatematica operacoesMatematicas = new OperacaoMatematica();
		
		 /*Array para guardar os resultados*/
		 int[] guardaOsResultados = new int[100];
	
		/*Escolhendo qual método/operações matemática usar*/
		 int soma1 = operacoesMatematicas.dividi(10, 2);
		
		 /*Guardando o resultado no array*/
		 guardaOsResultados[0] = soma1; 
		 
		 /*Escolhendo qual método/operações matemática usar*/
		 operacoesMatematicas.soma(10, 2);
		 
		 /*Escolhendo qual método/operações matemática usar*/
		 operacoesMatematicas.multiplica(10, 2);
		 
		 /*Escolhendo qual método/operações matemática usar*/
		 operacoesMatematicas.dividi(10, 2);
	
		//Ou você pode implementar mais ou menos assim: (se 1 for diferente de 1 ele vai somar o que daria 2, como 1 é igual a 1 o resultado será 1, a multiplicação)
		/* if(1 != 1){
			 operacoesMatematicas.soma(1, 1);
		 }
		 else{
			 operacoesMatematicas.multiplica(1, 1);
		 }*/
	
	}
	
	
	
	
}
renzonuccitelli

Então, parece que o Vinicius está começando ainda.
Encher a cabeça dele com vários conceitos não vai ajudar nada, só atrapalhar, visto que ele ainda está no início.
Falar de polimorfismo para quem ainda não entende direito o que é um método e como o retorn funciona fica complicado :wink:

[]´s

Pois é, mas não custa deixar a idéia de OO pra que ler depois…hehe. Ou então o problema sou eu que ando pensando OO demais.
[]s

viniciusglanert

Gente, desculpem a demora pra responder!

Vou refazer algumas coisas na calculadora, ainda não adquiri o tão comentado conceito Orientado a Objetos hehe
Mas aceito dicas, assim aprenderei ^^


Na real as linhas não são iguais… O comando sim.
Mas cada uma exibe um “titulo” diferente no PLAIN_MESSAGE

Mas realmente eu poderia diminuir o código se retirasse :slight_smile:


Obrigado a todos!

Criado 7 de outubro de 2010
Ultima resposta 18 de out. de 2010
Respostas 27
Participantes 7