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!");
}
}
}
Problema com loop
9 Respostas
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!");
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();
}
}
}
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!
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.
Obrigado!! Pessoal valeu.
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.
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. 
É 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.
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();
}
}