[RESOLVIDO] imprimir e guardar uma variavel

3 respostas
N

Pessoal, to aproveitando o feriado pra dar uma estudada aqui, e to fazendo uns exercicios de Java, e to com uma dificuldade aqui em uma exercício, é o seguinte:

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

eu tentei fazer aqui, mas o compilador fica rodando e não para mais, eu fiz assim:

public static void main(String[] args) {
		int i = 20;
		int y;
			
			while (i > 1){
					i++;
				if (i % 2 == 0){
					y = i/2;
				}
				else {
					y = 3*i+1;
				}
			}
				System.out.println(i);
                 
	}

3 Respostas

LeSimoes

Boa noite,
fiz algumas alterações no seu código mas sem alterar muito sua lógica. Segue o código revisado.

public static void main(String[] args) {  
        int i = 40;  
        int y = 0;  
        
              //Usei o comando do...while pois para qualquer valor o processo será realizado pelo menos uma vez
        
        do{
            	System.out.print(i + " -> ");    //Entre no bloco fazendo a impressão da variável i
            	if ( (i % 2) == 0){
            		y = i/2; 
            	}
            	else{
            		y = 3*i+1; 
            	}
            	i = y;     // <----   Procedimento para sair do bloco do...while
            }while(y != 1);
                  
            System.out.print(i);
             
    }

O seu algoritmo estava em um loop infinito porque não fazia a “troca das variáveis”, ou seja, seu código fazia os procedimentos corretos, mas o valor de da variável “i” era sempre o mesmo, no caso 20. O seu comando while estava trabalhando com o valor da variável “i” que era sempre maior que 1, por isso o loop infinito.
Para colocar um fim nesse loop precisamos fazer a troca de valores, ou seja, depois de feito o procedimento, caso o i seja par ou ímpar, a variável “i” deve receber o valor da variável “y”, que é o resultado de um dos procedimentos…

A melhor saída para esses problemas de lógica é “rodar” o algoritmo no papel. Reproduzir cada iteração (repetição) do algoritmo numa folha de papel com uma caneta. Isso faz você se concentrar apenas no algoritmo e esquecer outros detalhes como sintaxe.

INTÈ!

Ps.: Aparentemente o comando i++ do seu código, na linha 6, não é necessário e poderia realizar uma iteração indesejada no algoritmo.

N

Muito obrigado, eu ainda não sei usar muito bem o do, mas deu pra entender como você fez, e realmente aquele “i++” eu nem sei o porque que coloquei ele lá.

LeSimoes

Amigo, de uma maneira bem simples… O While primeiro verifica se é verdade, se for executa o trecho de código, se não segue em frente, o Do…While, executa o trecho de código e depois verifica, se for verdade ele executa mais uma vez, se não ele se em frente, simples assim…
Analisei novamente e para o seu algoritmo pode-se usa somente o While.

Para você que está aprendendo recomendo a pegar o livro Java: Como Programar - Deitel. Os livros dos Deitel são referências na área de desenvolvimento, e o livro mescla bastante teorica com prática, vc vai aprender condicionais, estruturas de dados e etc, e fazer programas visualmente interessantes, nada de tela preta…

INTÈ!

Criado 6 de abril de 2012
Ultima resposta 8 de abr. de 2012
Respostas 3
Participantes 2