Java - Porque bucle while ,y condicional if - elsif no funcionan correctamente?

 
Vista:
sin imagen de perfil

Porque bucle while ,y condicional if - elsif no funcionan correctamente?

Publicado por Mateo (1 intervención) el 30/06/2017 18:16:14
Hola, soy un estudiante de java y no entiendo porque el output de este programa sale asi, espero que me puedan ayudar a entender y mejorar el codigo es este simple programa. Desde ya muchas gracias.

Aca esta el codigo o en el zip.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
import java.util.Scanner;
 
import com.sun.org.apache.xerces.internal.util.SynchronizedSymbolTable;
 
public class AdivinarACpuV2 {
 
	public static void main(String[] args) {
 
		Scanner scanner = new Scanner(System.in);
 
		int cantnumero = 50;
		int random = (int) (Math.random() * cantnumero);
		int ls = cantnumero;
		int li = 1;
		int bucle1 = 0;
		int bucle = 0;
 
		System.out.println("Estoy pensando en un numero del 1 al " + cantnumero + ", intenta adivinarlo!!");
		System.out.println("Para adivinarlo utiliza < o >, presiona enter y luego inserta el numero");
		System.out.println(random);
 
 
		while (bucle1 == 0) {
			//Pregunta por < o >
			System.out.print("Es el numero ... ");
			String resp = scanner.nextLine();
			bucle = 0;
 
			//Condional de respuesta
			while (bucle == 0) {
				if (resp.equals("<")) {
					int numero = scanner.nextInt();
					if (random < numero) {
						ls = numero;
						bucle = 1;
						System.out.println("Si lo es");
 
					} else {
						li = numero;
						bucle = 1;
						System.out.println("No lo es");
 
					}
				} else if (resp.equals(">")) {
					int numero = scanner.nextInt();
					if (random > numero) {
						li = numero;
						bucle = 1;
						System.out.println("Si lo es");
 
					} else {
						ls = numero;
						bucle = 1;
						System.out.println("No lo es");
 
					}
				} else {
					System.out.println("Intenta escribiendo una expresion correcta");
					bucle = 1;
				}
			}
 
			//Checkea si ls-li == 1 y termina el codigo
			if (ls - li == 1) {
				System.out.println("Hasta aca");
				bucle1 = 1;
			}
		}
	}
}


En el output me repite y me dice cosas que no deberia

Estoy pensando en un numero del 1 al 50, intenta adivinarlo!!
Para adivinarlo utiliza < o >, presiona enter y luego inserta el numero
29
Es el numero ... >
10
Si lo es
Es el numero ... Intenta escribiendo una expresión correcta
Es el numero ...

Espero que me puedan ayudar, desde ya muchas gracias!!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil

Porque bucle while ,y condicional if - elsif no funcionan correctamente?

Publicado por Juan Francisco (58 intervenciones) el 01/07/2017 13:01:26
Puedes ser por intro que se queda cada vez que introduces un numero ...cada vez que haces un scanner.nextInt(), el scanner guarda el intro en el buffer y debes limpiarlo haciendo a continuacion un scanner.nextLine()...o sea en la linea 32 y linea 45
a continuacion un scanner.nextLine(), para que limpie el intro ...y no lo coja el scanner.nextLine() de la linea 26..seguramente se saltara esa entrada por que coje el intro que se queda en el buffer...
Prueba eso que creo que sera..
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar