Ajuda em loping [RESOLVIDO]

Bom dia pessoal;

Estou começando em programação, preciso de ajuda na resolução de um algoritmo.

O problema é esse.

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 é ímpar, y = 3 * x +1
. imprime y

. O programa deve então jogar o valor de y em x e continuar até que tenha o valor final de 1. Pro exemplo, para x = 13, a saída sera:

40 -> 20 -> 10 -> 5 -> 16 -> 8 -> 4-> -> 2-> 1

Gostaria que me ajudassem neste problema, ele esta no capitulo 3 exercício 7 apostila caelum.

Obrigado

Oi,

Bom dia Benjamin10,

O que você já fez deste exercício? e qual exatamente a sua dúvida?

Tchauzin!

Coloca ai o que vc já fez para te ajudar. Ou vc está com problema na idéia mesmo?

Cara, jah fiz esses exercicios ai…
de cara vc vai achar este ai complicado, mais e tranquilo…
poste ai a sua ideia do exercicio, o que vc jah fez…!

pq o interessante é vc conseguir sem ninguem precisar te dar a respostas, sakou :!: :!:

Começe a escrever o código, mesmo que vc não tenho uma ideia certa do que fazer, vai implementando no codigo oque vem na sua cabeça, o que você pensa que vai solucionar o problema, isso ajuda muito a solucionar o exercicio…

bom, eu vi outra pessoa com duvida nesse mesmo problema, para ela eu dei a reposta por ela jah tinha dado um caminho e talz, se você quizer ver… Relembrando que é muito bom você tentar antes de olhar…

http://www.guj.com.br/posts/list/207938.java

Pessoal ta ai onde eu parei. no exercício fala pra usar fors encadeados.

quando ele executa o if divide o x pelo y. so que como faço para essa variável y que agora é ímpar entrar na outra conta e começar o processo novamente.

public class Main {

public static void main(String[] args) {

    int x=10;
    int y=0;
    
    for(int i = 0; i<1; i++){
        
        if((x % 2)==0){
            y = x/2;
            System.out.println(y);
            
        }
        else
        {
            y = (3 * x)+1;
            System.out.println(y);
        }
    }
}

}

Obrigado pessoal pela ajuda, gostei muito deste fórum :smiley: ;

Não precisas de um for, já que não sabes quantas vezes vais fazer o loop mas precisas sim de um while, porque o que sabes é a condição de paragem (y=1)

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

        int y=10;
        int x=y; //Esta variável era desnecessária mas vou mantê-la para ser mais fácil de perceber
        
       while (y != 1) {  //Entra no loop sempre que y seja diferente de 1
            
            if((x % 2)==0){
                y = x/2;
              
            } else  {
                y = (3 * x)+1;
            }
           System.out.println(y);
           x = y; //x toma o valor de y
        }
    }
}

A mesma coisa só com uma variável:

public class Main {

    public static void main(String[] args) {

        int y=10;
        
       while (y != 1) {  //Entra no loop sempre que y seja diferente de 1
            
            if((y % 2)==0){
                y = y/2;
              
            } else  {
                y = (3 * y) + 1;
            }
           System.out.println(y);
        }
    }
}

Obrigado fera agora entendi o problema valeu msmo

Abraços !! :smiley: