Problema com o retorno de um método

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;
		}
		
	}

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

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…

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

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

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
		}

	}

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!

[quote=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.

[code]

public int numero (int d){

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

[/code][/quote]

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 :slight_smile: logo, o seu código vai quebrar.

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

O certo seria:

[code]
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
	}

}

[/code][/quote]

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; }

[quote=sergiotaborda][quote=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.

[code]

public int numero (int d){

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

[/code][/quote]

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 :slight_smile: logo, o seu código vai quebrar.[/quote]

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.