Java - BOOLEAN JAVA

 
Vista:
sin imagen de perfil
Val: 21
Ha disminuido su posición en 46 puestos en Java (en relación al último mes)
Gráfica de Java

BOOLEAN JAVA

Publicado por winters (11 intervenciones) el 07/11/2020 23:16:40
Tengo una duda: Porque en la condicion while (!partidaTerminada) es igual a FALSE???, si primero lo declare FALSE y lo diferente seria TRUE , lo digo porque al cumplirse el primer if es igual a TRUE y eso rompe el bucle


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
boolean partidaTerminada = false;
 
do {
    dado1 = (int) (Math.random() * 6 + 1);
    dado2 = (int) (Math.random() * 6 + 1);
 
    System.out.println("Dado 1: " + dado1);
    System.out.println("Dado 2: " + dado2);
    System.out.println("Suma: " + (dado1 + dado2));
 
    if ((dado1 + dado2) == suma) {
        System.out.println("¡Enhorabuena! ¡Ha ganado otros " + dinero + " €!");
        System.out.println("¡Ahora tiene " + dinero * 2 + " €!");
        partidaTerminada = true;
    } else if ((dado1 + dado2) == 7) {
       System.out.println("Pulse INTRO para tirar los dados.");
        s.nextLine();
    }
} while (!partidaTerminada);
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
Imágen de perfil de Kabuto
Val: 3.428
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

BOOLEAN JAVA

Publicado por Kabuto (1381 intervenciones) el 07/11/2020 23:50:38
El bucle while se repite mientras la expresión que contiene entre su paréntesis, sea TRUE.

Cuando se cumple el primer IF, entonces partidaTerminada = true;

Bien, pero este while su expresión a evaluar consisten en la variable partidaTerminada, pero con el signo de admiración por delante:

1
while (!partidaTerminada);

Ese signo lo que hace es "negar" la variable que tiene detrás, es como ponerle la palabra NOT delante
Esto significa que cuando partidaTerminada es TRUE, la expresión del while equivale a "NOT TRUE"

Y "NOT TRUE" , es FALSE. Y si es FALSE, entonces el bucle while se detiene, porque solo se repetirá mientras la expresión sea TRUE

Es decir, que cuando partidaTerminada tenga valor FALSE, el búcle while SÍ se seguirá ejecutándose, porque NOT FALSE es TRUE
Y cuando tenga valor TRUE, como ya hemos dicho, el bucle se para porque NOT TRUE es FALSE

Esto es muy lógico y evidente..., pero a veces a la mente humana le cuesta un poquito aclararse con esto del CIERTO y NO CIERTO


Resulta un poco más fácil de entender si lo hiciéramos así:
1
while (partidaTerminada == false);

O así:
1
while (partidaTerminada != true);


Y es correcto y el programa funcionará igual.
Pero es un poco redundante, porque en esas expresiones estamos usando dos booleanos, cuando ya hemos visto que se puede resolver usando solo uno, usando el signo de admiración para "negar" el booleano según nos convenga.
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
sin imagen de perfil
Val: 21
Ha disminuido su posición en 46 puestos en Java (en relación al último mes)
Gráfica de Java

BOOLEAN JAVA

Publicado por winters (11 intervenciones) el 08/11/2020 00:37:48
Se entendió a la perfección, es mejor igualar para entender mejor. * Una curiosidad en el while elimine el signo de admiracion , lo que seria FALSE la condicion; pero al entrar al primer IF lo que seria TRUE(tendria que romperse el bucle yaque son diferente), pero me genera un bucle infinito. Porque?
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
Imágen de perfil de Kabuto
Val: 3.428
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

BOOLEAN JAVA

Publicado por Kabuto (1381 intervenciones) el 08/11/2020 22:10:07
Pues... no se..

Si la condición del primer IF no se cumple, el bucle debería terminar.
No vemos el resto del código, quizás si finaliza pero está dentro de otro ciclo de código que vuelve a repetirlo...

A veces va bien poner mensajes System.out para controlar hasta donde llega, o no llega, un código.
Por ejemplo, puedes añadir un mensaje en pantalla justo después de que termine el while, y así compruebas si realmente termina o no.
Cuando se haya aclarado que ocurre y esté corregido, lo puedes eliminar.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
boolean partidaTerminada = false;
 
do {
    dado1 = (int) (Math.random() * 6 + 1);
    dado2 = (int) (Math.random() * 6 + 1);
 
    System.out.println("Dado 1: " + dado1);
    System.out.println("Dado 2: " + dado2);
    System.out.println("Suma: " + (dado1 + dado2));
 
    if ((dado1 + dado2) == suma) {
        System.out.println("¡Enhorabuena! ¡Ha ganado otros " + dinero + " €!");
        System.out.println("¡Ahora tiene " + dinero * 2 + " €!");
        partidaTerminada = true;
    } else if ((dado1 + dado2) == 7) {
       System.out.println("Pulse INTRO para tirar los dados.");
        s.nextLine();
    }
} while (!partidaTerminada);
System.out.println("Bucle de tirar dados ha terminado");
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