Dúvida com relação à saída de um método

7 respostas
airmigjr

Pessoal

se eu tiver um método, por exemplo:

public Integer consultaIdade(){
	
	Integer idadeJoao = pessoas.get("João");    
	Integer idadeMarcos = pessoas.get("Marcos");
        return ?????;
	}

Veja que o método faz duas coisas, que são buscar num HashMap as informações relativas a João e Marcos. Mas sabendo-se que um método não pode ter dois retornos, como faço para aproveitá-lo para me fornecer as duas saídas?
Como faço para "juntar" as duas informações para ter uma única saída com as duas idades numa String? Posso utilizar um toString() para isso?

1 Abraço,

Airton

7 Respostas

Rodrigo_Sasaki

Você precisa repensar esse método. Por que um método que se chama consultarIdade retornaria 2 valores? isso não faz sentido.

A ideia é aproveitar o método para não ter que repetir código. Exemplo:int idadeJoao = consultarIdade(joao); int idadeMarcos = consultarIdade(marcos);

utluiz

Uma suposição… se ideia for listar as idades de um conjunto de pessoas, para fazer uma média, por exemplo, o método pode retornar um array de inteiros.
Mas realmente não está claro a intenção. As pessoas que o método recupera a idade são fixas?

airmigjr

Na verdade é apenas uma suposição. Com certeza, enxergo que seria melhor deixar o método sem valores fixos para que ele retorne valores de idades de determinadas pessoas quando e as quais eu quiser, mas preciso de uma forma didática de passar isso para os meus alunos, e gostaria de passar os 3 conceitos, o de retorno de somente um “dado” do método, o de converter aqueles 2 dados inteiros em String, e a utilização do toString(). Gostaria de saber utilizar o toString() para transformar os 2 valores em String e concatená-los para serem o único retorno do método.

Rodrigo_Sasaki

É perfeitamente possível, mas é uma baita duma gambiarra.

Não acho que isso deva ser ensinado como alternativa pra nenhum aluno.

Hebert_Coelho

É perfeitamente possível, mas é uma baita duma gambiarra.

Não acho que isso deva ser ensinado como alternativa pra nenhum aluno.+1

utluiz

Pessoalmente, acredito que não é melhor misturar conceitos ao ensinar pessoas leigas. Cada um de uma vez é mais didático, na minha opinião.
Para retorno de valores múltiplos, tipo um registro, use um objeto com um atributo para cada valor.

Por exemplo:
package org.escola.exemplo01;

import java.util.HashMap;
import java.util.Map;


public class ExemploRetornosMetodo {

	private Map<String, Integer> pessoas = new HashMap<String, Integer>();
	
	public ExemploRetornosMetodo() {
		
		pessoas.put("João", 28);
		pessoas.put("Marcos", 30);
		
	}
	
	/**
	 * Exemplo de retorno de uma idade, com um nome de método que descreve claramente seu intuito
	 */
	public Integer getIdadeJoao() {
		
		return pessoas.get("Joao");
		
	}
	
	public Integer getIdadeMarcos() {
		
		return pessoas.get("Marcos");
		
	}
	
	/**
	 * Classe usada para retorno de um "registro" com as idades
	 */
	public static class IdadesPessoas {
		
		private Integer idadeJoao;
		private Integer idadeMarcos;
		
		public IdadesPessoas(Integer idadeJoao, Integer idadeMarcos) {
			
			this.idadeJoao = idadeJoao;
			this.idadeMarcos = idadeMarcos;
			
		}
		
		public Integer getIdadeJoao() {
			return idadeJoao;
		}
		
		public Integer getIdadeMarcos() {
			return idadeMarcos;
		}
		
	}
	
	/**
	 * Exemplo de método que retorna um "registro", ou seja, um objeto com vários valores 
	 */
	public IdadesPessoas consultaIdades() {
		
		return new IdadesPessoas(getIdadeJoao(), getIdadeMarcos());
		
	}
	
	/**
	 * Exemplo de toString() significativo
	 */
	public String toString() {
		
		return "Joao e Marcos tem, respectivamente, " + getIdadeJoao() + " e " + getIdadeMarcos() + " anos.";
		
	}
	
}
airmigjr

utluiz, muito obrigado pela resposta.
Vou com certeza levar a sua dica em consideração, e agradeço novamente pelo envio do código com o exemplo.
1 Abraço,

Airton

Criado 6 de novembro de 2012
Ultima resposta 6 de nov. de 2012
Respostas 7
Participantes 4