correção do trabalho!

bom eu ainda to seguindo com as aulas da apostila da caelum, proximo exercico foi esse:

  1. (opcional) 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

class Teste4 {
   public static void main(String[] args){


int x=13;
int y;



      if(x % 2 == 0){

         System.out.print("NUMERO PAR -->> "+x);

      }else{

       System.out.print("NUMERO IMPAR -->> "+x);

       x = 3*x+1;

       y = x;

      }
    


  for(int i = x; i > 1; i++){

         

    if(x % 2 != 0){                                          

       x = 3*x+1; 
      
       System.out.print("-->> "+x);

       y = x / 2;
 
       x = y;

        System.out.print("-->> "+x);
   

    }else{
   
       y = x / 2;
 
       x = y;
           
        System.out.print("-->> "+x);

    if(x==1){

     break;
      
            }        
                 }
                          }
         }
            }

Alguém pode corrigir pra mim, e se puder agradeceria se comentasem o código, caso achem erros.
E tb quanto a identação, será que está certo assim?
Ainda to no começo, então criticas são muito bem aceitas.
Sei que para quem analizar, é facil, mas pra mim ainda está complicado…eheheheh
VLW

seu if (o que verifica se é PAR), só esta verificando a entrada, e a questao esta pedindo que a cada atribuição de x ele verifique isso…

entao esse if tem que ser dentro do laço…

e seu for, entrou em loop.
vc começa com i = x, e faz isso até que seja maior que 1, entao vai fik incrementeando ate…

eu sugiro o seguinte, vc fazer um
do{} while(x ==0);

e dentro dele é onde vc vai verificar se é par, se for vc faz a divisão e imprimi Y,
e se nao for vc faz a conta e imprime novamente Y.

e embaixo (ainda detro do do…while vc atribui Y a x (X = Y).

e fica dentro do laço ate que seja igual a 1…

pronto seu problema ta resolvido!!!

vlw

Olá, Javaini.

Eu já fiz esse exercício e ficou um pouco mais simples.
Pelo enunciado não é preciso imprimir se é par ou impar, ok? É só para imprimir o valor de “y”.

Faça uma revisão no seu for pois ele ficou um pouco confuso e você está fazendo as duas operações ao mesmo tempo, o que não é o correto.

Não sei se tenho muito para ajudar pois terminei o FJ-11 ontem mas se precisar é só entrar em contato.
Segue a minha resolução para você ter uma base.

[code]class Teste4 {
public static void main(String[] args) {

	int x = 13;
	int y = 0;

	do {
		if((x % 2) == 0) {
			y = (x/2);
			System.out.print(y + " ");
			if(y != 1) System.out.print("-> ");
		} else {
			y = (3 * x) + 1;
			System.out.print(y + " ");
			if(y != 1) System.out.print("-> ");
		}
		x = y;
	} while (y > 1);
}

}[/code]

Ulysses

é eu baguncei pokim o meu código, mas esse foi o segundo desafio, num tá perfeito, mas acho qeu to no caminho certo…, é que aqui não tem ninguem pra dar uma luz, estou somente lendo o fj11 da caelum, e tentando resolver, to lendo ainda lógica de programação, nem posso dizer se estou indo bem ou muito mal, se alguem puder dizer algo sobre, quem fez o curso, qeum ja sabe muito tb, será qeu eu estou indo bem? Precisava ver uma escola como é, mas aqui o curso so abre em dezembro.
Umendonça: acho que tem que imprimir sim, o valor par e impar, ve ai:
se x é par, y = x / 2
se x é impar, y = 3 * x + 1
imprime y

isso tava sendo complicado pra mim entender, pq tentava dar break quando ele imprime par, mas quando for impar, ele tem que continuar ate dar resultado 1

tipo se digitar 14, acaba ali, mas se for 13 ele tem que continuar, vou colocar tudo dentro de laços pra ver como fica. vlw gente

Se você reparar direito o teste de par e ímpar é só para saber qual o valor vai para “y”… Somente depois disso é que imprime o “y”.

Quanto ao código, reparei que coloquei uma coisa que pode ser simplificada.
É nas linhas de teste para a impressão do “->”. Coloquei duas vezes mas se ficar depois dos “ifs” pode ser uma vez só (linhas 13 e 14):

[code]class Teste4 {
public static void main(String[] args) {

    int x = 13;   
    int y = 0;   

    do {   
        if((x % 2) == 0) {   
            y = (x/2);   
        } else {   
            y = (3 * x) + 1;   
        }   
        System.out.print(y + " ");   
        if(y != 1) System.out.print("-> ");   
        x = y;   
    } while (y > 1);   
}   

} [/code]