Problema com o retorno de um método

9 respostas
D

Olá pessoal. Fiz um método bem bestinha aqui só pra explicar o meu problema. Aqui no eclipse nesse código abaixo diz que o método “numero” deve retornar um resultado inteiro, mas eu estou sempre retornando um inteiro ali nos cases dentro do switch. Então qual é o problema nesse método? Não dá pra usar return dentro do switch? Espero que me ajudem.

public int numero (int d){
		
		switch (d){
		case 1:
			return d+1;
		case 2:
			return d+2;
		}
		
	}

9 Respostas

E

Suponha que d == 3. O que esse método vai retornar?

D

Acho que vai dar erro. Mas se d==2 ele vai retornar alguma coisa? Porque pelo que o eclipse diz parece que esse método não esta retornando nada…

D

Coloquei um “return null” no final do método e o aviso desapareceu. Porque desse jeito deu certo?

F

Para isso utilize o default, pois não sendo nenhuma das case’s ele executa o default.
Abs
t+

S

Não tem como isso ter dado certo porque metodos inteiros não podem retornar null. Apenas números inteiros.

O certo seria:

public int numero(int d) {

		switch (d) {
		case 1:
			return d + 1;
		case 2:
			return d + 2;
		default:
			return 0;  //ou qualquer outro número inteiro
		}

	}
lina

Oi,

Simplesmente porque o “return null” será acionado quando nenhum condição “case” se torne satisfeita. Ou então porque o compilador não é suficientemente inteligente para captar isso de sua aplicação.

Tchauzin!

sergiotaborda
darkmen:
Olá pessoal. Fiz um método bem bestinha aqui só pra explicar o meu problema. Aqui no eclipse nesse código abaixo diz que o método "numero" deve retornar um resultado inteiro, mas eu estou sempre retornando um inteiro ali nos cases dentro do switch. Então qual é o problema nesse método? Não dá pra usar return dentro do switch? Espero que me ajudem.
public int numero (int d){
		
		switch (d){
		case 1:
			return d+1;
		case 2:
			return d+2;
		}
		
	}

O switch é uma forma evoluida do if-else
cada case é um if, mas o else ?
O switch precisa de um default que significa "se não for nenhuma das opções que eu escolhi, então ... "
É considerado um erro vc não usar o default, embora o compilador aceite. Por isso que ele dá o warning. A configuração do seu eclipse está feita para que quando o compilador dê esse warning o eclipse entenda como erro e pare de compilar. Vá em opções / Java compiler se quiser remover esse warning ( mas é claro que vc não deve fazer isto).
Sempre coloque o default. Por isso obriga vca pensar "e se não for nenhum destas opções ?" Por exemplo, no seu caso de exemplo, não está definido o que acontece se d for outro numero que não 1 e 2 e ha muitos numeros diferentes de 1 e 2 :) logo, o seu código vai quebrar.

lucasportela
Sem_Nome:
darkmen:
Coloquei um "return null" no final do método e o aviso desapareceu. Porque desse jeito deu certo?

Não tem como isso ter dado certo porque metodos inteiros não podem retornar null. Apenas números inteiros.

O certo seria:

public int numero(int d) {

		switch (d) {
		case 1:
			return d + 1;
		case 2:
			return d + 2;
		default:
			return 0;  //ou qualquer outro número inteiro
		}

	}

Na verdade inteiro até deixa retornar null, desde que seja um Wrapper, se for primitivo realmente não pode

// aceita
private Integer teste(){
    return null;
}
// não aceita
private int teste(){
    return null;
}
D
sergiotaborda:
darkmen:
Olá pessoal. Fiz um método bem bestinha aqui só pra explicar o meu problema. Aqui no eclipse nesse código abaixo diz que o método "numero" deve retornar um resultado inteiro, mas eu estou sempre retornando um inteiro ali nos cases dentro do switch. Então qual é o problema nesse método? Não dá pra usar return dentro do switch? Espero que me ajudem.
public int numero (int d){
		
		switch (d){
		case 1:
			return d+1;
		case 2:
			return d+2;
		}
		
	}

O switch é uma forma evoluida do if-else
cada case é um if, mas o else ?
O switch precisa de um default que significa "se não for nenhuma das opções que eu escolhi, então ... "
É considerado um erro vc não usar o default, embora o compilador aceite. Por isso que ele dá o warning. A configuração do seu eclipse está feita para que quando o compilador dê esse warning o eclipse entenda como erro e pare de compilar. Vá em opções / Java compiler se quiser remover esse warning ( mas é claro que vc não deve fazer isto).
Sempre coloque o default. Por isso obriga vca pensar "e se não for nenhum destas opções ?" Por exemplo, no seu caso de exemplo, não está definido o que acontece se d for outro numero que não 1 e 2 e ha muitos numeros diferentes de 1 e 2 :) logo, o seu código vai quebrar.

Valeu cara pela explicação. Era isso mesmo, agora o erro sumiu. Pensei que o default era opcional e se não fosse nenhum dos cases ele retornaria null.

Criado 6 de fevereiro de 2013
Ultima resposta 6 de fev. de 2013
Respostas 9
Participantes 7