Pessoal, sou nova em Java e estou tentando treinar minha lógica com os exercícios da apostila da Caelum. O exercício que eu vou colocar a seguir, pode ser que já tenha em outro tópico, porém, eu achei melhor não olhar para que eu possa treinar minha lógica como informei anteriormente e não simplesmente copiar e colar… eu quero entender o código.
Exercício:
Escreva um programa que, dada uma variável x (com valor 180, por exemplo), temos y de acordo
com a seguinte regra:
se x é par, y = x / 2
se x é impar, y = 3 * x + 1
imprime y
O programa deve então jogar o valor de y em x e continuar até que y tenha o valor final de 1. Por exemplo, para x = 13, a saída será:
40 -> 20 -> 10 -> 5 -> 16 -> 8 -> 4 -> 2 -> 1
Eu fiz vários códigos, mas aí eu apagava e fazia novamente quando não dava certo, o mais perto que consegui chegar é colocar o número 13 e mostrar o valor até 5, depois disso eu não conseguia fazê-lo voltar para a regra se o número for impar… Eu não sei o que usar: If, For, While… Na maioria eu usava o While com o IF, mas estava com problemas no incremento.
Meu último código foi esse, que não está dando certo:
[code]public class Teste {
public static void main(String[] args){
int y = 0;
String string = javax.swing.JOptionPane.showInputDialog("Entre com um valor numerico: ");
int x = Integer.parseInt(string);
if(x % 2 != 0){
y = (x * 3) + 1;
System.out.println(y);
while (y % 2 != 0 && y >= 1){
y = y * 3 + 1;
System.out.println(y);
x = y;
}
}else {
y = x / 2;
System.out.println(y);
while (y % 2 == 0 && y >= 1){
y = y / 2;
System.out.println(y);
x = y;
}
}
}
}
[/code]
Alguém poderia me ajudar? Desde já, agradeço.