Como retornar 2 ou + valores em um método?

9 respostas
G

Olá,

Eu criei esse método :

public void setCalculo() {  
      
          if (ano <= 2000) {  
             desconto = 0.12;  
             totAte2000 += 1;  
      
          } else {  
             desconto = 0.07;  
             totMais2000 += 1;  
      
          }  
      
       }

E eu gostaria de criar um método getCalculo retornando os valores para o objeto:

double desconto;  
    int totAte2000;  
    int totMais2000;

Como eu faria isso ?

Desde já. Obrigado,
Gustavo

9 Respostas

N

Oi!

Porque não cria um objeto com os campos necessários, instancia o mesmo no seu método, preenche os respectivos campos e retorna esse objeto?
Dessa forma teria todos os valores necessários e poderia manipular como quisesse.

Abraços.

G

Um método no Java não retorna mais de um objeto, mas pode retornar vários objetos dentro de um. Veja:

class Foo {
    // Você precisa inicializar esses campos em algum momento.
    double desconto;
    int totAte2000;
    int totMais2000;
    Object[] object;

    Foo() {
        object = new Object[3];
    }

    void setCalculo(int ano) {
        if (ano <= 2000) {
            desconto = 0.12;
            totAte2000 += 1;

        } else {
            desconto = 0.07;
            totMais2000 += 1;
        }
        object[0] = desconto;
        object[1] = totAte2000;
        object[2] = totMais2000;
    }

    Object[] getCalculo() {
        for (Object obj : object) {
            System.out.println(obj);
        }
        return object;
    }

    public static void main(String[] args) {
        Foo foo = new Foo();
        foo.setCalculo(20);
        foo.getCalculo();
    }
}
I

Gustavo,

Eu não sei se entendi o que você está querendo como resultado, mas acho que isso soluciona seu problema:
private Calculo calculo = new Calculo();

public void setCalculo(int ano) {
	if(ano <= 2000) {
		calculo.setDesconto(0.12);
		calculo.setTotAte2000(calculo.getTotAte2000() + 1);
	}
	else {
		calculo.setDesconto(0.07);
		calculo.setTotMais2000(calculo.getTotMais2000() + 1);

	}
}

public Calculo getCalculo() {
	return calculo;
}

class Calculo {
	private double desconto = 0.0;
	private int totAte2000 = 0;
	private int totMais2000 = 0;

	public double getDesconto() {
		return desconto;
	}

	public void setDesconto(double desconto) {
		this.desconto = desconto;
	}

	public int getTotAte2000() {
		return totAte2000;
	}

	public void setTotAte2000(int totAte2000) {
		this.totAte2000 = totAte2000;
	}

	public int getTotMais2000() {
		return totMais2000;
	}

	public void setTotMais2000(int totMais2000) {
		this.totMais2000 = totMais2000;
	}
}

	public void setTotAte2000(int totAte2000) {
		this.totAte2000 = totAte2000;
	}

	public int getTotMais2000() {
		return totMais2000;
	}

	public void setTotMais2000(int totMais2000) {
		this.totMais2000 = totMais2000;
	}
}
Abraço.
I

Você pode também tentar retornar um array de strings, com seus dados depois converte devolta de string.

M

o certo é criar uma classe, mas se insistir pelo método, crie um array de object e depois faça o cast:

private Object[] getCalculo() { Object[] o = new Object[3]; o[0] = desconto; o[1] = totAte2000; o[2] = totMais2000; } ... Object[] o = getCalculo(); double desconto = (double)o[0]; int totAte2000 = (int)o[1]; int totMais2000 = (int)o[2];

R

:lol:

G

Oi Gente, obrigado !!

Desculpa eu acho que realmente eu fui muito vago na minha pergunta.

Mas o que queria era talvez reduzir o tamanho do código, retornando mais de um valor no mesmo método, pois achava que tinha algum jeito.

Consegui copilar o código que queria , ele acabou ficando meio grande, mas acho que não tem outro jeito. (??)

Vê o que vocês acham ? … acrescente sugestões !! (Obrigado)

import javax.swing.JOptionPane;  
      
    public class ValorCarro {  
      
       int valor;  
       double valorFinal;  
       int ano;  
       boolean sair;  
       double desconto;  
       int totAte2000;  
       int totMais2000;  
      
       public void setinfo() {  
      
          valor = Integer.parseInt(JOptionPane  
                .showInputDialog("Digite o valor do carro"));  
          ano = Integer.parseInt(JOptionPane  
                .showInputDialog("Digite o ano do carro"));  
       }  
      
       public int getValor() {  
          return valor;  
      
       }  
      
       public int getAno() {  
          return ano;  
       }  
      
       public void Calculo() {  
      
          if (ano <= 2000) {  
             desconto = valor * 0.12;  
             totAte2000 += 1;  
      
          } else {  
             desconto = valor * 0.07;  
             totMais2000 += 1;  
          }  
          valorFinal = valor - desconto;  
       }  
      
       public double getDesconto() {  
          return desconto;  
       }  
      
       public double getValorFinal() {  
          return valorFinal;  
       }  
      
       public int getTotAte2000() {  
          return totAte2000;  
       }  
      
       public int getTotMais2000() {  
          return totMais2000;  
       }  
      
       public void imprimir1() {  
          JOptionPane.showMessageDialog(null,  
                "O valor final do carro com desconto é de \n" + "R$ "  
                      + valorFinal);  
       }  
      
       public void setSair() {  
      
          int y = 0;  
      
          y = Integer  
                .parseInt(JOptionPane  
                      .showInputDialog("Você deseja continuar a usar o programa ?" + "\n"  
                            + "Digite (1)- Sim , (2)- Nao"));  
      
          switch (y) {  
          case 1:  
             sair = true;  
             break;  
          case 2:  
             sair = false;  
             break;  
          }  
      
       }  
      
       public boolean getSair() {  
          return sair;  
       }  
      
       public static void main(String[] args) {  
      
          ValorCarro a1 = new ValorCarro();  
      
          do {  
      
             a1.setinfo();  
             a1.getValor();  
             a1.getAno();  
             a1.Calculo();  
             a1.getDesconto();  
             a1.getValorFinal();  
             a1.getTotAte2000();  
             a1.getTotMais2000();  
             a1.imprimir1();  
             a1.setSair();  
             a1.getSair();  
      
          } while (a1.sair == true);  
      
          JOptionPane.showMessageDialog(null, "Foram calculados " + "\n"  
                + a1.totAte2000 + " carros com ano até 2000 " + "e" + "\n"  
                + a1.totMais2000 + " carros com ano maior de 2000 ");  
       }  
    }

Valeu gente obrigado

M

dava pra dar uma refinada né, principalmente uns “gets” que não são salvos em variável alguma aí, tão desperdiçando linhas e processamento
tenta pensar melhor linha a linha o que seu programa tá fazendo, mas tá indo no caminho certo n.n

P

Acho que vc pode Descrever uma classe que tenha esses atributos que vc quer retornar, nesse caso olhe para o seu dominio e veja o que faz mais sentido. Criar uma classe “por criar” pq vc fez “um metodo” nem sempre é uma boa escolha.

Por exemplo vc tem uma classe que sabe calcular desconto/valores E perguntar algo para o usuario usando swing. Eu pensaria em separar esses caras em algum momento.

Criado 3 de agosto de 2011
Ultima resposta 5 de ago. de 2011
Respostas 9
Participantes 8