AE!!!galera eu já fiz uma calculadora basica com Switch case
No caso o usuário digitava o primeiro número , um números para a operação como no switch e depois o segundo numero ai o resultado
exemplo:
digite o primeiro numero:
1
1-para soma
2-para multiplicar
3-para dividir
4-para subtrair
2
digite o segundo numero
3
resultado = 3
mas eu gostaria q o usuário não digitasse os números para a operação e sim as operações aritméticas
exemplo:
digite o calculo:
2x2
resultado = 4
// o X tem como operação multiplicar se o usuário digitasse 2/2 o resultado seria 1,assim como + e o -
EU gostaria que a calculadora funcionasse como o exemplo acima alguém pode ajuda como faço isso?
Não funciona. Com Strings o hashcode da String será calculado. O que significa que duas strings diferentes tem uma pequena chance de cair no mesmo switch.
[quote=ViniGodoy]Legal, não sabia dessa. O ideal mesmo é se manter longe de switchs e lembrar que existe uma maravilha chamada polimorfismo.
Além disso, é bom saber que o custo de um switch com Strings feito dessa forma acaba sendo alto.[/quote]
Realmente, quando eu li o código descompilado eu percebi isso também, e vi que Switch com Strings acaba gerando um processamento desnecessário.
Visto que o tópico é de uma dúvida que parece acadêmica, seria até interessante se o autor fizesse uma “calculadora polimórfica” pra estudar os conceitos.
[quote=mateusviccari]mas então o switch do java sempre vai ver primeiro o hashCode e depois ainda faz um if?
Isso funciona somente pra strings ou pros outros tipos tambem?[/quote]
Bom, a melhor maneira de explicar é mostrando, veja os exemplos:
Código que eu fiz[code]public class Teste{
public static void main(String[] args){
String str = "A";
switch (str){
case "A": System.out.println("Found A"); break;
case "B": System.out.println("Found B"); break;
default: System.out.println("Found nothing"); break;
}
}
}[/code]Código descompilado pelo Java Decompiler[code]import java.io.PrintStream;
public class Teste
{
public static void main(String[] paramArrayOfString){
String str1 = “A”;
String str2 = str1;
int i = -1;
switch (str2.hashCode()) {
case 65:
if (!str2.equals("A"))
break;
i = 0;
break;
case 66:
if (!str2.equals("B"))
break;
i = 1;
}
switch (i) {
case 0:
System.out.println("Found A"); break;
case 1:
System.out.println("Found B"); break;
default:
System.out.println("Found nothing");
}
}
}[/code]Eu só arrumei a identação.
Aí você vê que o Java não faz “realmente” switch por Strings
Eu já odeio switch… e com string ainda mais ? vish … essa eu não sabia … Muito obrigado Rodrigo… agora tenho argumentos pra discutir o PQ não usar essa joça…
[quote=ViniGodoy]Por que o switch pode ser substituído por polimorfismo. Mesmo com enum, veja:
Ótimo link (até salvei em favoritos ). Pelo que eu vi, essa forma chega a ser extremamente mais rápido do que com switch.
Mas eu fiquei com uma dúvida.
Me recordo que em um tópico semelhante a este (no qual alguém perguntava como se fazia uma calculadora) você deu a mesma sugestão (de usar polimorfismo).
A minha dúvida é: se fosse algo como tipo, o usuário entra com a operação desejada pelo console, como você faria para que o programa escolhesse a operação correta.