Problema com loop

9 respostas
ucastrobr
Exercício para adivinhar um número de 1 a 1000. O problema é que quando executo o programa, ele para o loop depois de umas 6 tentativas e não retorna a resposta correta. Segue código:
import java.util.Scanner;
import java.util.Random;
public class Adivinhe {

public static void main(String [ ] args) {
Random numeroAleatorio = new Random();
int resposta;
int numero;
Scanner input = new Scanner(System.in);
System.out.printf("Adivinhe qual o número que estou pensando");
System.out.printf("Insira o número: ");
resposta= input.nextInt();


numero = 1+ numeroAleatorio.nextInt(1000);

while(numero < resposta){
System.out.printf("O palpite está muito alto/n");
System.out.printf("Tente novamente, insira novo número: ");
resposta=input.nextInt();

}

while (numero> resposta) {
System.out.printf("O palpite está muito baixo/n");
System.out.printf("Tente novamente, insira novo número: ");
resposta= input.nextInt();
}

if (numero==resposta) {
System.out.printf("Parabéns, você acertou!");
}

}
}

9 Respostas

wagnerfrancisco

Teu código tem problemas de lógica. Logo no primeiro teste que fiz, inseri os números 100 e 800, sendo que o sorteado foi 710. Observe o problema:

A variável numero recebe 710 (aleatoriamente). Quando digito 100 o programa já ignora o primeiro while (afinal, 710 não é menor que 100) e cai no segundo, me avisando que meu palpite está baixo demais. Mas quando digito 800, não tenho mais como testar se o número que digitei é maior que o sorteado, desse modo o programa simplesmente termina (se minha resposta for igual a numero ele ainda imprime "Parabéns…).

Que tal algo assim:

while ( (resposta = input.nextInt()) != numero ) {
   if ( numero < resposta ) {
      System.out.println("O palpite está muito alto/n");
   } else {
      System.out.println("O palpite está muito baixo/n");
   }
   System.out.println("Tente novamente, insira novo número: ");
}
System.out.println("Parabéns, você acertou!");
OliveirakunJava
ucastrobr eu entendi o que vc quer mas o seu código realmente está com a lógica errada, da uma olhada nesse código aqui:
import java.util.Scanner;

public class Adivinhe {
   int palpite;
   int numero=(int)(Math.random()*1000);
        
   
   public void geraPalpite(){
	   System.out.println("Adivinhe qual o número que estou pensando..");
	   System.out.println("Insira o número:");
	   Scanner sc=new Scanner(System.in);
	   palpite=sc.nextInt();
	   
	 }
   public boolean confereResposta(){
   if(numero < palpite){
	   System.out.println("O palpite está muito alto");   
	   System.out.println("Tente novamente, insira novo número: ");  
	   return false;
	   
    }
   else if(numero > palpite){
	  System.out.println("O palpite está muito baixo");   
	  System.out.println("Tente novamente, insira novo número: "); 
	  return false;
		   
   
    }
   else {   
	   System.out.println("Parabéns, você acertou!"); 
	   return true;
	   }   

   
   }
   
   public static void main(String[] args){
	   Adivinhe adv=new Adivinhe();
	   adv.geraPalpite();
	   while(!adv.confereResposta()){
		   adv.geraPalpite();
	   
	   }
	   
   }
}
wagnerfrancisco

OliveirakunJava:
Wagner eu entendi o que vc quer mas o seu código realmente está com a lógica errada, da uma olhada nesse código aqui:

Não entendi onde está errada a lógica no meu código. Não sei se é o sono ou algo assim, mas poderia me explicar onde?

Falou!

OliveirakunJava

Putz foi mal cara!!eu queria dizer que a lógica que tava errada era a do código do ucastrobr!desculpa aí pode deixar que vou consertar meu erro.

ucastrobr

Obrigado!! Pessoal valeu.

GALACTUS

Véiu, na boa, o dia que alguem adivinhar o o número desse seu programa, pede pra essa pessoa adivinhar o número da mega-sena pra voce que você vai ficar millionário.

De 1 a 1000??? Mas nem o HighLander consegue adivinhar.

Esse seu exercício é bem bacana, é que eu não manjo muito se não eu te ajudaria, mas eu lembro de um colega meu que fez isso em pascal de 1 a 100 e já achei impossivel adivinhar.

OliveirakunJava

Eu acertei…hehe, cara copia esse código, cola no eclipse e manda rodar ele, vc irá perceber que o programa vai lhe dando dicas para vc acertar o número, ele vai dizendo se o palpite ta muito baixo ou muito alto e conforme essas dicas vc vai aumentando ou diminuindo o seu palpite e não tem limite de palpites vc vai tentando adivinhar até acertar. :wink:

GALACTUS

É mesmo véiu, que bacana, ele vai tipo dando umas dica, legal pra caramba em, mas no programa que o meu colega tinha feito em pascal de 1 a 100 éra ou acertar ou acertar porque não tinha esses lances de dica, éra tipo roleta russa hahahaha, mas ae, bacana o programa, nota 10.

B

O tópico é de 100 anos atrás, porém, segue aí uma ajuda para quem for procurá-lo, já que eu estava com a lógica muito semelhante a do ucastrobr e fiz a inclusão de um while a mais para executar corretamente conforme o exercicio do livro Deitel.

import java.util.Scanner;
import java.util.Random;
public class AdivinheNumero {
	private int palpite;
	private int numero;
	private String nomeTitulo;
	Scanner input = new Scanner(System.in);
	Random randomNumero = new Random();
	// construtor
	public Ex6_30_Adivinhe_Numero(String titulo) {
		nomeTitulo = titulo;
	}
	// método set
	public void setTitulo(String titulo) {
		nomeTitulo = titulo;
	}
	// método get
	public String getTitulo() {
		return nomeTitulo;
	}
	// método que exibe o título
	public void exibeTitulo() {
		System.out.println(getTitulo());
	}
	// método que recebe o valor do palpite
	public void adivinha() {
		// número sorteado
		numero = 1 + randomNumero.nextInt(1000);
		// lê do usuário um palpite
		System.out.println("\nEnter a number. [Informe um número]");
		palpite = input.nextInt();
		// testa até o valor ser encontrado
		while (palpite != numero) {
			// se palpite for maior que o número exibe mensagem
			while (palpite > numero) {
				System.out.println("\nToo high. Try again "
						+ "[Muito alto. Tente novamente]");
				palpite = input.nextInt();
			}
			// se palpite for menor que o número exibe mensagem
			while (palpite < numero) {
				System.out.println("\nToo low. Try again "
						+ "[Muito baixo. Tente novamente]");
				palpite = input.nextInt();
			}
			// exibe mensagem que você achou o número
			if (palpite == numero) {
				System.out.println("\nCongratulations. You guessed the number "
						+ "[Parabéns. Você adivinhou o número]");
			}
		}
	}
}
public class TestaAdivinheNumero {
	public static void main(String[] args) {
		AdivinheNumero teste =
			new AdivinheNumero(
				"Guess a number between 1 and 1000 " + 
				"[Adivinhe um número entre 1 e 1000]");
		teste.exibeTitulo();
		teste.adivinha();
	}
}
Criado 26 de setembro de 2008
Ultima resposta 29 de nov. de 2012
Respostas 9
Participantes 5