Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

E usando "for"?

Apenas gostaria de fazer a mesma coisa só que usando "for" ao invés de "while"

class TresNMaisUm {
    public static void main(String[] args) {
        int x = 13;
        System.out.println("Iniciando...\n");
        while (x != 1) {
            System.out.print(x + " > ");
            if (x % 2 == 0) {
                x = x / 2;
            } else {
                x =(( 3 * x) + 1);
            }
        }
        System.out.print(x);
    }
}
4 respostas

acho que se vc fizer o for iniciando com o variavel contador do laço com valor da variavel x, e depois ir decrementando o contador com um c-- , a logica dentro do escopo continuaria a mesma.

Gabriel, o for deve ser utilizado quando se tem um numero exato de repetições a serem executadas, como por exemplo de 1 a 100, de 10 a 20..... etc.

Quando na sua lógica tiver que ser executada, até chegar a um determinado valor, nesse caso voce deve utilizar o while.

Conforme sua pegunta, segue o código com o for, porém essa é uma péssima pratica e não deve ser utilizada.

int i =0; for (i=13; i != 1;){ System.out.print(i + " > "); if (i % 2 == 0) { i = i / 2; } else { i =(( 3 * i) + 1); } } System.out.print(x);

Olá Gabriel, As estruturas mais adequadas quando não se sabe a quantidade de passos seria o while e o do..while. Para utilizar o for nessa situação deve-se retirar o último parâmetro, que seria o contador, ficando a estrutura com a penas 2 parâmetros. Dessa forma o incremento da variável 'x' passa a ser trabalhando dentro da estrutura for. O código ficaria assim:

int x;
        System.out.println("Iniciando...\n");
        for(x=13; x!=1;){
            System.out.print(x + " > ");
            if (x % 2 == 0) {
                x = x / 2;
            } else {
                x =(( 3 * x) + 1);
            }

        }
        System.out.print(x);

Só lembrando que isso não é uma boa prática de programação, pois acaba sendo gambiarra.

solução!

Como todos disseram, não é boa prática, mas...


int x;
for (x = 13; x != 1; x = (x % 2 == 0 ? x / 2 : ((3 * x) + 1))) {
    System.out.print(x + " > ");
}
System.out.print(x);

Dessa forma você realmente usa o for, com seus 3 dados.