Código entra em loop infinito [Resolvido]

14 respostas
Maureli

o valor 25 é impresso infinitamente.

public class fj7{
	public static void main (String[] args){
		int Y = 2;
		int X = 50;
			while(Y > 1){
				if (X % 2 == 0){
				Y = X / 2;
				}
				else{
				Y = 3 * X + 1;
							}
							
				System.out.println(Y);

					}
			}
	}

14 Respostas

T

Hum… você não se esqueceu de fechar alguma chave?

Maureli

Vlw Thingol, resolvi o problema do IF.

To com problema de luping agora. :slight_smile:

T

Você não precisa mexer no X também? Não sei como é sua fórmula.

Fernando_Generoso_da

Dá uma olhada na tua lógica… Y será sempre 25, sempre > 1, ou seja, sempre entrando no while…

Fernando

N
CORREÇÃO
public class fj7{  
     public static void main (String[] args){ 

     
         int Y= 2; // VOCÊ USOU UMA EXPRESSÃO NO WHILE EM QUE O Y INICIALMENTE TINHA ALGUM VALOR,   //INICIALIZE   O Y COM ALGUM NÚMERO, SE NÃO PUDER ALTERAR, USE OUTRA VARIÁVEL DE CONTROLE
         int X = 50;
   
             while(Y > 1){  
                 if (X / 2 == 0){  
                 Y = X / 2;
                 }  // TODO IF E ELSE TEM QUE TER UM BLOCO DE ÍNICIO E FIM, FECHE AQUI PARA FAZER UM ELSE
                 else { 
                 Y = 3 * X + 1;  
                             }  //FECHE AQUI PARA O ELSE NÃO SAIR ERRADO
                 System.out.println(Y);  
   
                    }  
}
}

:D

N

Não sei bem o que seu código faz pkê você n comentou, mas
os erros tão aí, modifique , se o Y não puder começar com um número pois será utilizado no decorrer do programa, faça uma varíavel de controle
pra isso ; e n esqueça de postar aqui o resultado
:smiley:

gustavomurad

Você diz que X é do tipo inteiro e inicializa com 50, mas em nenhum momento você altera o valor de X, sempre ele vai cair no (X % 2 == 0) e vai te retornar sempre 25.

O que esse algorítimo deveria fazer?

pmlm

Isso também está errado.

Para o problema em causa só precisas de uma variável, que é o número inicial e que vai sendo sempre reatribuida até chegar a 1.

public static void main(String[] args) {
           
    int x = 50;  

    while(x > 1){    
        if (x % 2 == 0){    
            x = x / 2;  
        } else {   
            x = 3 * x + 1;    
        }  
  
      System.out.println(x);    
    }

}
pmlm

Aparentemente (foi o que eu fiz), o código visa implementar aquela regra que diz que, para qualquer número, podemos chegar a 1 fazendo sempre o seguinte:

  • se for impar multiplica por 3 e soma 1
  • se for par divide por 2
gustavomurad

pmlm:
Aparentemente (foi o que eu fiz), o código visa implementar aquela regra que diz que, para qualquer número, podemos chegar a 1 fazendo sempre o seguinte:

  • se for impar multiplica por 3 e soma 1
  • se for par divide por 2

Matou a pau! :smiley:

Maureli

gustavomurad:
pmlm:
Aparentemente (foi o que eu fiz), o código visa implementar aquela regra que diz que, para qualquer número, podemos chegar a 1 fazendo sempre o seguinte:

  • se for impar multiplica por 3 e soma 1
  • se for par divide por 2

Matou a pau! :smiley:

É esse mesmo meu código, poriso uso as duas variaveis X e Y, se X for par Y = X / 2, se X for impar Y = 3 * X + 1

Maureli

public class fj7{ public static void main (String[] args){ int Y = 2; int X = 50; while(Y > 1){ if (X % 2 == 0){ Y = X / 2; } else{ Y = 3 * X + 1; } System.out.println(Y); X = Y; //resolvi o problema, fiz o X receber o Y, ai X pode continuar fazendo o teste de par e impar } } }

Obrigado a todos pela ajuda.

pmlm

Maureli:
X = Y; //resolvi o problema, fiz o X receber o Y, ai X pode continuar fazendo o teste de par e impar


Por isso eu tinha dito acima que só precisavas de uma variável… Assim tens duas, mas com o mesmo valor.

Maureli

pmlm:
Maureli:
X = Y; //resolvi o problema, fiz o X receber o Y, ai X pode continuar fazendo o teste de par e impar


Por isso eu tinha dito acima que só precisavas de uma variável… Assim tens duas, mas com o mesmo valor.

O exercicio pedia para usar duas variáveis, X e Y.

:slight_smile:

Criado 16 de junho de 2009
Ultima resposta 17 de jun. de 2009
Respostas 14
Participantes 6