Tabuada

9 respostas
airmigjr

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

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

}

9 Respostas

ViniGodoy

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:
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());
	}
}
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.

Criado 1 de julho de 2011
Ultima resposta 3 de jul. de 2011
Respostas 9
Participantes 5