Sair de um Método

Como faço para sair de um método e voltar para o método main?
Esse método quando chamado executa infinitamente:

static void Listar(){	
	if(quantidadeAluno == 0){
		System.out.println("Nao ha alunos cadastrados.");
	}else{
		System.out.println("Nome		 "+ "	RA" );
		for(int i = 0; i < quantidadeAluno; i++){
			System.out.println(nome[i]+"	 "+"     	 	"+RA[i]);
		}
	}
	return;
}

Caro Augusto, tu não podes usar o return num método void, e no else tenta comparar com um valor, tipo …
else
{
if(quantidadeAluno<0)

}

E por que não pode? Afirmar sem conhecer acaba passando informação errada…

Em java, void também é um tipo de retorno… por isso aceita um return vazio (void)…

Não é muito usual, mas é perfeitamente possível… @AugustoCastro tente garantir uma validação mais “reforçada”…

if (quantidadeAluno < 1) {
    System.out.println("Nao ha alunos cadastrados.");
    return;
}

System.out.println("Nome "+ "	RA" );
for(int i = 0; i < quantidadeAluno; i++){
    System.out.println(nome[i]+" "+"	"+RA[i]);
}

Esse return garante retorno sem executar o for abaixo, e mesmo chegando no for, o retorno é automático, pois todo método void, acaba retornando para quem o chamou…

que tipo de dados retorna um metodo void?

Não retorna dado algum, e portanto nenhum tipo de dado.

Abraço.

1 curtida

entao porque usar return num metodo void… nao faz sentido

Justamente para forçar retorno… é uma forma de dizer ao java, “atingi meu objetivo, pode voltar o controle ao método que me chamou…”

Todo método exige um retorno (mesmo que seja void), senão o java se perderia, pegou?

Mesmo você não declarando um return, ao chegar no final é como se o java adicionasse um pra retornar…

Acaba entrando no conceito de pilha de execução…

Os médotos também consomem memória, não somente os atributos e o java precisa ter um controle de chamadas, etc, é um assunto longo, pesquise mais a respeito…

1 curtida

Acho que você está um fixado no fato de que a palavra return indica que algo deve ser ser retornado, quando o que o return significa é diz “saia daqui agora!”. A presença do return não implica que algo (uma informação, um dado qualquer) será retornado. Isso é feito pelo tipo de dado do método, e o tipo sendo void elimina a necessidade de retornar algum dado.

Pense que esse return funciona de forma similar a um break num switch, que força a saída do switch. Note que é conceitualmente similar, não é igual.

No Java e em outras linguagens usa-se a palavra return, mas em outras linguagens outras sintaxes são usadas. Em pascal, por exemplo, usa-se Exit para a mesma coisa, que gramaticamente deixa a coisa mais compreensível. Compare o método/procedure a seguir, que são basicamente equivalentes:

//Pascal
procedure ExibirMensagemSeOValorForMaiorQueDez(valor : integer);
begin
   if (valor <= 10) then
      begin
        Exit; // funciona basicamente igual a um return; no java
      end;

    writeln('O valor informado é maior que dez');
end;

// Java
public void ExibirMensagemSeOValorForMaiorQueDez(int valor){
  if (valor <= 10){
    return; // funciona basicamente igual o Exit; acima
  }

  System.out.println("O valor informado é maior que dez");
}

Abraço.

2 curtidas

Não sabia dessa, obrigado pela explicação!! Mas há diferença no desempenho na função, se incluo o return ou não no metodo void?

Primeiro, é bom deixar claro: você não é obrigado a colocar return; num método void.

Partindo do princípio acima, você pode se perguntar o motivo de se colocar esse return. O método que coloquei acima pode ser facilmente reescrito sem o uso do return:

public void ExibirMensagemSeOValorForMaiorQueDez(int valor){
  if (valor > 10){
    System.out.println("O valor informado é maior que dez");
  }
}

Sendo um exemplo simples, é visível que este método não precisa do return; . Colocar ou não o return não é uma questão de desempenho, mas de estilo do código. Às vezes, você tem um código extremamente complexo mas que não precisa ser executado se uma determinada condição não for atendida (veja o exemplo acima, na resposta do rodevops, onde ele mostra que, se não há alunos cadastrados, não se tenta executar o loop). Usar esse return pode deixar o código mais facilmente legível, e portanto mais fácil de manter, o que é sempre desejável.

Nesse cenário, o desempenho não é o foco, e um return vazio ou um método sem return tem uma diferença irrelevante de desempenho.

Veja um outro exemplo, mais trivial ainda:

public void metodoQualquer(){
  for(int i = 0; i < 100; i++){
    System.out.println("Mensagem número " + i);
  }

  return; // esse return é inútil e poderia ser omitido
}

Nesse caso, o return é desnecessário. Acredito até que o compilador seja capaz de eliminá-lo, embora não conheça no detalhe para dizer com certeza. A diferença de desempenho é totalmente desprezível, se não for inexistente.

Abraço.

2 curtidas