While duplo e rotulado(erro logico)

1 resposta
G

pessoal eu to fazendo um problema de maratona e nesse mesmo eu encontro uma duvida como faço para colocar dois numeros para rodar nesse while.
o algoritmo pra um numero consegui fazer sem maiores problemas!

public class Pro1{
	public static void main(String args[]){
		
		int n,x;
		int cp =0,ci = 0,ct =0;
		String out = "";
		x = 0;
		out = JOptionPane.showInputDialog("Digite o numero");
		n = Integer.parseInt(out);
			System.out.println(n);
		while(n!=1){
		 if(n==1){
		   break;
		  }else{
		  	x = n % 2;
		  	if(x==0){
		  		n /= 2;
		  		cp +=1;
		  		System.out.println(n);
		  	}else{
		  		ci +=1;
		  		n = ((3*n) + 1);
		  		System.out.println(n);
		  	}
		 	
		  }
		  
		   	
		}
		ct = cp + ci + 1;
		System.out.println("o total do ciclo e de: " + ct);
		
		System.exit(0);
	
	
	}
}

mas quando chega a ter dois numeros não sai conforme o esperado desse algoritmo acima.Então eu fiz um while normal com dois numeros e um outro while rotulado mas estes dois não rodaram legal.

while normal:

import javax.swing.*;
public class Teste001 {
	public static void main(String args[]){
		
		String a,b;
		int x,y;
		
		a = JOptionPane.showInputDialog("Digite o primeiro valor");
		x = Integer.parseInt(a);
		b = JOptionPane.showInputDialog("Digite o segundo valor");
		y = Integer.parseInt(b);
		
		while((x!=1)&&(y!=1)){
			if(x==1){
			  break;
			 }else{
			 	if(y==1){
			 		break;
			 	}else{
			 		System.out.println("O numero b e diferente de 1");
			 	
			 	}
			 	System.out.println("O numero a e diferente de 1");
			 }
			     
			
		}
	}
}

while rotulado

import javax.swing.*;

public class Teste002 {
	public static void main(String args[]){
		
	     String a,b;
	     int x,y;
	     
	     a = JOptionPane.showInputDialog("Digite o valor para a:");
	     x = Integer.parseInt(a);
	     b = JOptionPane.showInputDialog("Digite o valor para b:");
	     y = Integer.parseInt(b);
	
		stop: {
			
			while((x!=1)&&(y!=1)){
			if(x==1){
			  break stop;
			 }else{
			 	if(y==1){
			 		break stop;
			 	}else{
			 		System.out.println("O numero b e diferente de 1");
			 	
			 	}
			 	System.out.println("O numero a e diferente de 1");
			 }
			     
			
		}
			
		}
		
	}
}

Eu não consegui interpretar isso legal. Alguem sabe como faço para ler dois numeros e o break não estragar tudo. tipo entrada: 1 e 10
while sai e não da resposta nenhuma. e quando os numeros são por exemplo 12 e 45 fica num loop infinito. alguma sugestão?
eu to fazendo este problema.

http://acm.uva.es/p/v1/100.html

por favor, gostaria de saber se estou no caminho certo. Mas não resolvam para mim… grato se ajudarem…

1 Resposta

B

Ola,

Talvez, quando os numeros de entrada são: 12 e 45 entre em loop infinito pq vc não esta fazendo os calculos que o problema pede :cool: ,

Em relação ao loops não estarem respondendo… seguinte, a while para de rodar quando a condição der false, então, para que ele não pare de rodar na primeira, quando houver uma entrada “1” a condição tem que ser com “||”, e não “&&”, e vc fazer o tratamento devido dentro do while…

Criado 5 de março de 2007
Ultima resposta 5 de mar. de 2007
Respostas 1
Participantes 2