[b]Duvida quanto ao SWITCH

5 respostas
raniel

Pessoal não Consigo identificar o erro nesse código:

String nome = "Raniel";
		switch (nome.hashCode()){
		case "Raniel".hashCode() : System.out.println("O nome é Raniel");
		break;
		case "Vitor".hashCode() : System.out.println("O nome é Vitor");
		break;
		default : System.out.println("Default");
		}

5 Respostas

E

Dá um erro de compilação, porque a cláusula ‘case’ requer uma constante, e mesmo que você saiba o valor de “Raniel”.hashCode(), o compilador não sabe disso e rejeita essa construção. Se quiser usar isso (que não recomendo, porque pode haver duas strings com mesmo hashcode), calcule esses valores antes na mão (ou seja, escrevendo um pequeno programa que calcule esses valores), e ponha esses valores no seu programa.

drsmachado

Nem nós conseguiremos adivinhar o que é gerado no stackTrace

raniel

no stacktrace ele retorna

Exception in thread "main" java.lang.Error: Unresolved compilation problems: 
	case expressions must be constant expressions
	case expressions must be constant expressions

	at Utilizando_Switch.main(Utilizando_Switch.java:11)
drsmachado
raniel.nogueira:
no stacktrace ele retorna
Exception in thread "main" java.lang.Error: Unresolved compilation problems: 
	case expressions must be constant expressions
	case expressions must be constant expressions

	at Utilizando_Switch.main(Utilizando_Switch.java:11)
O entanglement , que não sabe brincar, já respondeu essa.
ViniGodoy

Solução a)
Substitua por um if (fica até mais legível):

String nome = "Raniel"; int hashNome = nome.hashCode(); if (hashNome == Raniel".hashCode()) { System.out.println("O nome é Raniel"); } else if (hashNome == "Vitor".hashCode()) { System.out.println("O nome é Vitor"); }

Solução b) use um map:

Map<Integer, String> hashNome = new HashMap<Integer, String>(); hashNome.put("Raniel".hashCode(), "Raniel"); hashNome.put("Vitor".hashCode(), "Vitor"); String nome = "Raniel"; System.out.println("O nome é " + hashNome.get(nome.hashCode());

Criado 22 de maio de 2012
Ultima resposta 22 de mai. de 2012
Respostas 5
Participantes 4