Problemas com o Código

7 respostas
FabioNoth

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..
/*
 * 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);
        }       
    }
}

7 Respostas

guisantogui

Ql eh o erro?

FabioNoth

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.

angeloghiotto

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…

FabioNoth

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

Nenhum dos dois geitos

FabioNoth

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 …

angeloghiotto

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...

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

    }
FabioNoth

Obrigado amigão…

Esta resolvido…

Criado 25 de maio de 2010
Ultima resposta 25 de mai. de 2010
Respostas 7
Participantes 3