Antes de postar eu pesquisei sobre esse exercício, mas vi que usaram 2 variáveis e eu não entendi o porque. Aparentemente o meu código funciona, exceto que ele imprime um -> a mais no final, se puderem me ensinar como tratar isso também, eu agradeço!
Enunciado:
7) (opcional) Escreva um programa que, dada uma variável x (com valor 180, por exemplo), temos um novo x de acordo com a seguinte regra:
se x é par, x = x / 2
se x é impar, x = 3 * x + 1
imprime x
O programa deve parar quando x tiver o valor ?final de 1. Por exemplo, para x = 13, a saída será: 40 -> 20 -> 10 -> 5 -> 16 -> 8� -> 4 -> 2 -> 1
Meu código:
class Numeros {
public static void main(String[] args) {
int x = 180;
while (x > 1) {
if ((x % 2) == 0) {
x = x / 2;
}
else {
x = 3 * x + 1;
}
System.out.print(x + "->");
}
x--;
}
}
Isto ocorre pq quando o x ser igual a 2 ele entra no if e se torna 1 e por ser igual a 1 ele sai do seu laço while , para resolver isto simplesmente coloque assim :
System.out.print("->"+x);
F
fggs
Aleksandro, obrigado pela rápida resposta!
Eu tentei dessa forma, mas dai ele começa imprimindo ->, pelo menos no enunciado ele mostra “numero -> outro numero…”. Eu sei que é um detalhe minúsculo, só estou curioso.
Quanto ao código, está correto? Eu não entendi porque em outros códigos o pessoal usou duas variáveis.
Aleksandro
fggs:
Aleksandro, obrigado pela rápida resposta!
Eu tentei dessa forma, mas dai ele começa imprimindo ->, pelo menos no enunciado ele mostra “numero -> outro numero…”. Eu sei que é um detalhe minúsculo, só estou curioso.
Quanto ao código, está correto? Eu não entendi porque em outros códigos o pessoal usou duas variáveis.
Pode ser que quem tá fazendo deve estar comparando as variaveis entre si … como não vi o outro código não sei te dizer , no seu caso , por ser um exercicio acredito que o importante é entender o conceito , ele sempre entra na sua interação while e sai quando x ser maior q 1, mas antes de ele validar se x é maior que 1 , ele passa pelo system.out…e insere o 1 …
Consegui arrumar a impressão, mas ACHO que ficou “porco”:
class Numeros {
public static void main(String[] args) {
int x = 180;
while (x > 1) {
if ((x % 2) == 0) {
x = x / 2;
}
else {
x = 3 * x + 1;
}
if (x == 1) {
System.out.print(x);
}
else {
System.out.print(x + "->");
}
}
x--;
}
}
Você pode substituir seu system.out por este aqui …
System.out.print(x>1?x+"->":x);
Elegância no código você acaba adquirindo com o tempo não se preocupe com isto agora, aprenda os conceitos …bons estudos …
ViniGodoy
Por favor, ao postar tópicos, evite marcar os títulos com informações óbvias, tais como [Duvida], [Ajuda], [Socorro] ou [Urgente].
ViniGodoy
Só a título de curiosidade. Esse exercício é a implementação da Conjectura de Collatz (também conhecida como seqüência de Hailstones). Ela foi proposta em 1937. Já foram oferecidos diversos prêmios para quem provasse a conjectura, em valores que vão de míseros 100 dólares Australianos, até um milhão de dólares.
Até hoje, não existe prova (ou contra-prova) para a conjectura.
F
fggs
ViniGodoy, mil perdões!
Obrigado pela informação interessante! Descobri mais tarde que meu código tinha um errinho (x–; não estava sendo utilizado). Ontem passei 3 horas pra resolver o for encadeado, sei lá, estou achando que estou levando muito tempo pra resolver exercícios “simples”, clássicos, básicos, mas vamos em frente!