Problemas com o Código

Pessoal estou tentando resolver aquela apostila da Caelum. Mais é um pouco complicada.

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

O código que eu fiz é este…

[code]/*

  • To change this template, choose Tools | Templates
  • and open the template in the editor.
    */

package Aprender;

/**
*

  • @author fabio
    */
    public class Exercicio7
    {
    public static void main (String []args)
    {

     int x = 180;
     int y = 0;
     while (y == 1)
     {
         if ( x%2 ==  0)
         {
             y = x/2;
         }
         else if (x%3 == 0)
         {
             y = 3 * x + 1;
         }
         System.out.println(y);
     }       
    

    }
    }[/code]

Ql eh o erro?

Não tem erro de código. Tem erro de lógica.

Ele pede para exibir uma sequência de respostas.
exemplo, para x = 13, a saída será:
40 -> 20 -> 10 -> 5 -> 16 -> 8 -> 4 -> 2 -> 1.

E esse resultado não sai.

Tenta colocar a validação de impar como

if ( x%2 != 0 ) …

ou simplesmente deixe o else vazio…

nem todo numero impar eh divisivel por 3…

Não ainda não deu certo… amigo angelo…

Nenhum dos dois geitos

Eu acho que o problema está no while… que não faz a contagem dos numeros para exibir…

mais eu não sei como resolver isso …

Olha como eu resolvi isso… você esqueceu de atribuir o valor de Y a X , a validação de impar estava errada, e também a validação do Y lá no While.

Aqui está meu codigo que mostrou o resultado esperado…

[code] public static void main(String[] args) {
int x = 13;
int y = 0;
while (y != 1)
{
if ( x%2 == 0)
y = x/2;
else
y = (3 * x) + 1;
System.out.println(y);
x=y;
}

}[/code]

Obrigado amigão…

Esta resolvido…