Tabuada

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

[code]import javax.swing.JOptionPane;

public class Tabuada {

public static void main(String[] args) {

	int num = 0;
			
	
	num = Integer.parseInt(JOptionPane.showInputDialog("Digite um número para receber sua tabuada"));
	String res = "Tabuada do "+num+":\n";
		for(int i=1;i<=10;i++){
			
			res = res + (i + "x" + num + " = " + (i * num)+"\n");
			
		}
		JOptionPane.showMessageDialog(null, res);
}

}[/code]

Isso se chama concatenação, que nada mais é do que a união de duas Strings.

Exemplo:

[code]String nome = “Vinícius”
String sobrenome = “Godoy”;

String nomeCompleto = nome + " " + sobrenome;
[/code]
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.

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

Vini, vc é o cara.
Obrigado.

Um comentário adicional. Concatenar Strings é um processo extremamente ineficiente e caro, pois Strings são objetos imutáveis.

O ideal é usar um StringBuilder:

[code]import javax.swing.JOptionPane;

public class Tabuada {
public static void main(String[] args) {
int num = Integer.parseInt(JOptionPane.showInputDialog(“Digite um número para receber sua tabuada”));
StringBuilder res = new StringBuilder(“Tabuada do “+num+”:\n”);
for(int i=1;i<=10;i++){
res.append(i).append(“x”).append(num).append(" = “).append(i * num).append(”\n");
}
JOptionPane.showMessageDialog(null, res.toString());
}
}[/code]

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

Gente o Code na tag code por favor.

Ah, quase esqueço. Por favor, não abra tópicos com títulos SOMENTE EM LETRAS MAIÚSCULAS.

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

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.