Galera é o seguinte estou estudando Java por conta própia sendo que já possuo noção de programação (não OB) mais uma dúvida que fiquei ao rodar o seguinte código:
[code]// programa para comparar 2 números
// pacote de extensão de Java
import javax.swing.JOptionPane;
public class Comparar {
// Método man inicia a execução do aplicativo
public static void main( String args[] )
{
String firstNumber, secondNumber, result;
int number1, number2;
firstNumber =
JOptionPane.showInputDialog( "Entre com o primeiro número:" );
secondNumber =
JOptionPane.showInputDialog( "Entre com o Segundo número:" );
number1 = Integer.parseInt( firstNumber );
number2 = Integer.parseInt( secondNumber );
result = "";
if ( number1 == number2 )
result = result + number1 + " é igual " + number2;
if ( number1 != number2 )
result = result + number1 + " é diferente " + number2;
if ( number1 < number2 )
result = result + "\n" + number1 + " é menor que " + number2;
if ( number1 > number2 )
result = result + "\n" + number1 + " é maior que " + number2;
if ( number1 <= number2 )
result = result + "\n" + number1 + " é menor ou igual a " + number2;
if ( number1 >= number2 )
result = result + "\n" + number1 + " é maior ou igual a " + number2;
JOptionPane.showMessageDialog(
null, result, "Comparação do Resultado",
JOptionPane.INFORMATION_MESSAGE );
System.exit( 0 );
}
}[/code]
o resultado obtido é o q o programa se propos a fazer, sendo que minha dúvida é q a varável “result” recebe um valor no primeiro “if” e caso ele venha a receber um outro valor de outro “if”, ele não perde o resultado anterior…como isso é possível…? pois ao meu entender um varíavel recebe um valor e armazena ela em memória e caso eu venha associar um outro valor a essa variável, o valor antigo simplesmente apaga…
bom agradeço pela ajuda…
[color=“red”]*Editado por jairelton: use bbcode nas suas mensagens.[/color]
E isso mesmo o que acontece, se vc atribui um novo valor a uma variavel o valor anterior é “perdido” !!
Preste atenção no seu codigo (alias use as tags do forum)
if ( number1 != number2 )
result = result + number1 + " é diferente " + number2;
aqui, result = result + , esta o “problema”
vc pede para que ele pegue o valor atual da variavel e concatene com os demais valores. Pra funcionar, tire isso, ficando assim :
if ( number1 != number2 )
result = number1 + " é diferente " + number2;
Mas dá uma olhada no algoritimo, sempre vai prencher apenas um das condiçoes ! Pois de number1 é igual a numbre2 as outras quatro condiçoes vão ser sempre falsas!
O Jairelton está certo, o “if” em alguns casos vai atender em mais de uma condição, o que eu ainda não entendi é que se vc rodar o programa parece que ele (ao meu entender) faz um loop. Como vc disse ele pega o valor de “result” que inicia como vazio, se “number1” for igual a “number2” o valor de “result” deixa de ser vazio e recebe o valor concatenado (até aqui tudo bem), agora depois dessa verificação é que não entendo, ele joga na tela e verifica a outra condição e apaga o valor de “result”, pois se o “number2” for maior ou igual a “number1” ele também vai receber um outro valor (diferente) do que existia no “result”, eu só queria entender como o JVM lê e joga na tela o programa…
Ps.: desculpe por não ter colocado as tags, é que ainda não sei como colocar…
Existe um objeto na memoria, que é essa String aí, no inicio ela é vazia, ok, ao entrar no primeiro if, quando você concatena, a JVM pega o valor atual de result que é “” e concatena com a outra String, criando um novo objeto String, em uma area diferente da memoria, veja que até agora o result não foi alterado, existem 2 objetos, depois de criar esse objeto, “ele” é atribuido a result, “matando” o que estava lá…
aí fica assim:
result = “\n 1 é menor que 2”;
ao entrar em outro if, a JVM novamente pega o valor atual de result que agora é “\n 1 é menor que 2” e concatena com a outra String, criando um novo objeto em uma nova area de memória, novamente a variavel result ainda não foi alterada, e existem 2 objetos, logo após o operador = atribui “o objeto” recem criado pela concatenação a result, matando o que estava lá, então sai “\n 1 é menor que 2” e entra "\n 1 é menor que 2 1 é diferente 2 ", veja que o valor foi substituido…
No inicio o valor de result era " ", se ele entrar em uma condição ele simplesmente associa o valor da condição, se por acaso ele entrar em outra condição if, ele simplesmente soma o valor antigo com o novo valor…e o “\n” simplesmente organiza a colocação do resultado da variável na tela…
Agora deu uma clareada…o fato todo é que na verdade a variável result é uma String e ela está sendo concatenada…se eu declarar uma varável assim:
result = “Lúcio”
result = “vitório” (se eu pedisse para exibir o valor da variável sairia na tela vitório.
result = “Lúcio”
nome = result + “vitorio” (ai o valor de nome seria Lúcio vitorio)