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