Olá Pessoal.
Alguém poderia me explicar teoricamente porque o programa abaixo funciona? Como é que eu consigo incrementar a variável res, se res é uma String?
Aguardo,
1 [ ]
Airton
importjavax.swing.JOptionPane;publicclassTabuada{publicstaticvoidmain(String[]args){intnum=0;num=Integer.parseInt(JOptionPane.showInputDialog("Digite um número para receber sua tabuada"));Stringres="Tabuada do "+num+":\n";for(inti=1;i<=10;i++){res=res+(i+"x"+num+" = "+(i*num)+"\n");}JOptionPane.showMessageDialog(null,res);}}
Isso se chama concatenação, que nada mais é do que a união de duas Strings.
Exemplo:
String nome = "Vinícius"
String sobrenome = "Godoy";
String nomeCompleto = nome + " " + sobrenome;
Ao final dessa operação nome completo vale "Vinícius Godoy".
No seu caso, vc está unindo o antigo conteúdo de res, com o novo, e guardando a resposta em res.
GabrielCardelli
Vocês jamais incrementa res no loop
O que faz é uma concatenação
res=“”i=0;num=2;
res = res + (i + “x” + num + " = " + (i * num)+"\n");
res = “” + (0 + “x”+ 2 + “=” + (0*2) + “PULA LINHA”
res neste instante é igual a 0 x 2 = 0 (Uma String)
res=" 0 x 2 = 0 (Pula linha \n)i = 1;num = 2;
res = res + (i + “x” + num + " = " + (i * num)+"\n");
= “” + (1 + “x”+ 2 + “=” + (1*2) + “PULA LINHA”
res neste instante é igual a 1 x 2 = 2 (Uma String)
Neste instante se o programa parar irá aparecer na tela
0 x 2 = 0
1 x 2 = 2
airmigjr
Vini, vc é o cara.
Obrigado.
ViniGodoy
Um comentário adicional. Concatenar Strings é um processo extremamente ineficiente e caro, pois Strings são objetos imutáveis.
O ideal é usar um StringBuilder:
importjavax.swing.JOptionPane;publicclassTabuada{publicstaticvoidmain(String[]args){intnum=Integer.parseInt(JOptionPane.showInputDialog("Digite um número para receber sua tabuada"));StringBuilderres=newStringBuilder("Tabuada do "+num+":\n");for(inti=1;i<=10;i++){res.append(i).append("x").append(num).append(" = ").append(i*num).append("\n");}JOptionPane.showMessageDialog(null,res.toString());}}
JoaoBluSCBR
Você rodou para ver o resultado??? kkkkkkkk
Oque o código : res = res + (i + “x” + num + " = " + (i * num)+"\n");
faz não é incrementar res, ele sim, concatena em res mais um pedaço de tabuada.
Então na primeira passada res fica:
“Tabuada do 0 :\n”
daí entra no loop
e acrescenta:
“Tabuada do 0 :\n1x0 = 0\n”
e no proximo giro fica
“Tabuada do 0 :\n1x0 = 0\n2x0 = 0\n”
e depois
“Tabuada do 0 :\n1x0 = 0\n2x0 = 0\n3x0 = 0\n”
ou seja, um lixo kkkkkkk
alanbrasil1984
Gente o Code na tag code por favor.
ViniGodoy
Ah, quase esqueço. Por favor, não abra tópicos com títulos SOMENTE EM LETRAS MAIÚSCULAS.
airmigjr
Vini,
executei seu codigo e depois experimentei retirar o toString() do final. Deixei somente o objeto. Funcionou. Vc acha q existe algum prejuizo nisso?
JOptionPane.showMessageDialog(null, res);
Obrigado,
Airton
ViniGodoy
Se você não chamar o toString() explicitamente, como eu fiz, o Java vai chamar implicitamente.
Isso pq vc está fazendo uma concatenação.
Mas há casos que o Java pode reclamar que o tipo em questão não é um String.