Dúvida sobre esse código!

7 respostas
F

Os valores não estão sendo passados para os métodos :(
Quando eu imprimo, o valor retorna todo 0.0

import java.text.NumberFormat;
//import java.text.NumberFormat;
import javax.swing.*;
public class Ex02 {

    public void lerNumeros (int num, int num2) {
     
        try {
        num = Integer.parseInt(JOptionPane.showInputDialog("1° Número: "));
        num2 = Integer.parseInt(JOptionPane.showInputDialog("2° Número: "));
      }
        catch (NumberFormatException e) {
        JOptionPane.showMessageDialog(null, "Apenas números inteiros nesse campo: ");  
        
     }
   
  }  
    
    public void Somar (int num, int num2) {
     
        float soma = num + num2;
        JOptionPane.showMessageDialog(null, "Soma: " + soma);
        
    }
    public void Subtrair (int num, int num2) {
     
        float sub = num - num2;
        JOptionPane.showMessageDialog(null, "Subtração: " + sub);
        
    }
    public void Multiplicar (int num, int num2) {
     
        float mult = num * num2;
        JOptionPane.showMessageDialog(null, "Multiplicação: " + mult);
        
    }
    public void Divisao (int num, int num2) {
     
        float div = num / num2;
        JOptionPane.showMessageDialog(null, "Divisão: " + div);
        
    }
    
    public static void main (String args[]) {
            int num = 0;
            int num2 = 0;
            Ex02 ex = new Ex02();
            ex.lerNumeros(num, num2);
            ex.Somar(num, num2);
            ex.Subtrair(num, num2);
            ex.Multiplicar(num, num2);
            ex.Divisao(num, num2);
    }     
    
}

7 Respostas

Rodrigo_Sasaki
Seu problema acontece porque em Java não existe passagem de parâmetro por referência.
public static void main(String[] args) throws Exception{
		Integer num = 10;
		System.out.println("Antes do método: "+num);
		metodo(num);
		System.out.println("Depois do método: "+num);
	}
	
	private static void metodo(Integer num){
		System.out.println("Dentro do método: "+num);
		num = Integer.valueOf(300);
		System.out.println("Depois da atribuição: "+num);
	}
Veja o que é impresso na execução desse código.

Quando você envia um parâmetro para um método, apenas uma cópia do valor dele é enviado.

Se envia um tipo primitivo, é enviada uma cópia do valor, e não a própria variável.
Se envia um objeto, é enviada uma cópia da referência, e não a referência que você tem ao invocar o método.

M

Você pode fazer o seu ‘lerNumero’ retornar um número

public void lerNumero () {
     int n = -1;
      try {
        n = Integer.parseInt(JOptionPane.showInputDialog("1° Número: "));
      }
        catch (NumberFormatException e) {
        JOptionPane.showMessageDialog(null, "Apenas números inteiros nesse campo: ");  
     }
     return n;
  }

Ou guardar os números dentro da classe

F
[quote=digaoneves]Seu problema acontece porque em Java não existe passagem de parâmetro por referência.
public static void main(String[] args) throws Exception{
		Integer num = 10;
		System.out.println("Antes do método: "+num);
		metodo(num);
		System.out.println("Depois do método: "+num);
	}
	
	private static void metodo(Integer num){
		System.out.println("Dentro do método: "+num);
		num = Integer.valueOf(300);
		System.out.println("Depois da atribuição: "+num);
	}
Veja o que é impresso na execução desse código.

Obrigado pela resposta, mas eu não entendo essa sintaxe que você usou...
Throws Exception...
Integer.ValueOff...

Eu não sei o que isso faz, fica difícil entender :)
Obrigado!

F

magostta:
Você pode fazer o seu ‘lerNumero’ retornar um número

public void lerNumero () {
     int n = -1;
      try {
        n = Integer.parseInt(JOptionPane.showInputDialog("1° Número: "));
      }
        catch (NumberFormatException e) {
        JOptionPane.showMessageDialog(null, "Apenas números inteiros nesse campo: ");  
     }
     return n;
  }

Ou guardar os números dentro da classe

Cara, eu não sei usar o return.

Rodrigo_Sasaki

consultou o javadoc dos métodos que não entendeu?

bom, os dois são irrelevantes para o problema.
public static void main(String[] args){
		Integer num = 10;
		System.out.println("Antes do método: "+num);
		metodo(num);
		System.out.println("Depois do método: "+num);
	}
	
	private static void metodo(Integer num){
		System.out.println("Dentro do método: "+num);
		num = 300;
		System.out.println("Depois da atribuição: "+num);
	}
Melhor?
douglaskd

o return funciona assim:

voce tem um método

int somaNumeros(int a, int b){

int c = a+b;

return c;

}

veja que la em cima eu coloquei um int antes do nome do método, aquilo é o tipo de dados que vou retornar.....

veja que declarei uma variavel do tipo int, e somei os numeros passados por parâmetro, depois retornei o resultado
---------

quando você fizer assim

int algumaVariavel = somaNumeros(5,10);

você tem que ler mentalmente dessa forma: " a variavel irá receber o valor que o método somaNumeros esta retornando, no caso o método tem la "return c" que é a soma dos dois numeros que foram passados por parâmetro.

então abaixo, quando você fizer:

system.out.println(algumaVariavel), ele vai imprimir 15.

no caso usei int, mais você pode usar qualquer tipo.... como string(texto),double,float, objetos que você mesmo cria etc...

o return deve retornar o mesmo tipo que você colocou na assinatura do método...

espero que tenha compreendido

Rodrigo_Sasaki
Eu acho que a confusão dele é por outro motivo...
public static void main(String[] args){

    Pessoa p = new Pessoa():
    p.setNome("Beto");
    System.out.println(p.getNome());
    alterarNome(p);
    System.out.println(p.getNome());

}

public static void alterarNome(Pessoa p){

    p.setNome("Zé");

}
Esse código funcionaria como ele quer, o objeto seria alterado dentro do método, e o objeto depois da finalização da execução do método, teria o seu nome alterado, mas no caso dele isso não funciona, justamente porque não existe passagem de parâmetros por referência em Java.
Criado 16 de agosto de 2012
Ultima resposta 16 de ago. de 2012
Respostas 7
Participantes 4