Foro de elhacker.net

Programación => Java => Mensaje iniciado por: Dem0ny en 16 Diciembre 2008, 12:32 pm



Título: Duda (Parar bucle con dato boolean) [bucle while]
Publicado por: Dem0ny en 16 Diciembre 2008, 12:32 pm
Bien tengo un gran codigo, normalmente no uso boolean asike no tengo practica con este, pero este programa me lo "requeria" aunke ya he conseguido arreglarlo, me gustaría entender el uso de estas expresiones. Les pondre un pequeño ejemplo.

Código
  1. import.java.util.*;
  2. class foro{
  3. public static void main (String args[]){
  4. Scanner leer=new scanner(System.in);
  5. int a;
  6. boolean seguir=true;
  7.  
  8.          while(seguir==true){
  9.                 System.out.printf("Hola mundo");
  10.                 System.out.printf("Probamos de nuevo?");
  11.                 System.out.printf("pulsa 1 para seguir, y cualquier tecla para terminar
  12.                                              el programa")
  13.                  a=leer.nextInt();
  14.  
  15.               if(a=1){
  16.                  seguir=true;
  17.               }
  18.               else{
  19.                System.out.printf("Fin de la aplicacion")
  20.                seguir=false;
  21.  
  22.                }
  23.           }
  24.      }
  25.  
  26. }
  27.  

Es un codigo rapido que se basa en la impresion por pantalla de hola mundo, posteriormente te pregunta que si quieres seguir el programa, si pulsas 1, se vuelve a imprimir hola mundo y te vuelve a preguntar si kieres seguir, y si pulsas cualquier otra tecla se supone que acaba el bucle, al cambiar el valor boolean a false y no cumplir la condición while.

Pues en el codigo tan grande que poseo es un ejemplo de como lo utilizo, hay muchos metodos mas, hay un chorro de lineas pero no entiendo porke no me para el bucle, es decir con este ejemplo, se constituye un bucle infinito.

Alguien podría explicarme mas o menos como funciona? El problema esque he buscado bien pero no me a aclarado mis dudas, siempre veo valores booleanos introducidos en metodos etc. Pero asi como lo he hecho yo, nosé si existirá siquiera.
 
-------

Finalmente solucione el problema metiendo donde pone seguir=false en la ultima parte del codigo con un break; pero en mi programa lo unico que necesitava en una parte era crear un bucle que se repitiera hasta que el usuario no quisiera. asique no se me ocurrio otra cosa que sustituir el seguir=false por break; , y me va todo perfecto el programa y tal, solo que cuando mande el codigo para su correcion nose si le gustará mucho ver un valor booleano declarado y en la condicion while (seguir=true) para acabarlo con un break. Esto es correcto o tb podría hacer algo mas concreto para eliminar el valor boleano o dejarlo también estaría bien?

Saludos y gracias de antemano!


Título: Re: Duda (Parar bucle con dato boolean) [bucle while]
Publicado por: Flakito81 en 16 Diciembre 2008, 12:47 pm
Con inicializar la vble seguir una sola vez (antes de entrar al bucle basta), tan solo cambias el estado cnd tenga que salir, el problema, quizas, está en el while que tienes while (seguir=true) cuando lo correcto sería while(seguir==true) o while(seguir)

Suerte!


Título: Re: Duda (Parar bucle con dato boolean) [bucle while]
Publicado por: Dem0ny en 16 Diciembre 2008, 13:15 pm
Ya he estado probando lo que me has dicho, lo he solucionado dejando asi:

boolean seguir;
seguir=true;

Luego en el while, he puesto while(seguir) y cuando llega el momento seguir=false.

Lo de == true no creo que te deje ya que, cuando tu utilizas en un condicional ==, lo que le asignas es el valor de una variable, caracter etc. es igualdad... nose como explicarlo, es comparación ==...nose como decirlo... por ello salta error el compilador:)

Saludos! Solucionado, gracias Flakito81


Título: Re: Duda (Parar bucle con dato boolean) [bucle while]
Publicado por: -Ramc- en 16 Diciembre 2008, 17:25 pm
Pero, ~AbbadoN~ lo que dice Flakito81 es correcto; while() recibe un valor boolean solo true o false, y tu haces seguir = true osea que antes de probar la variable seguir con el while siempre sera true, por lo que tu bucle sera infinito. Igualmente en el if, tienes un solo = y ese si debería lanzarte un error ya que envias a = 1, y cuando prueba la variable a en el while estas enviando un número y recibe un boolean, lo correcto es == para comparar.


Título: Re: Duda (Parar bucle con dato boolean) [bucle while]
Publicado por: juancho77 en 17 Diciembre 2008, 09:18 am
Código
  1. while (seguir=true)
  2. {
  3. }

primera se hace la asignacion, y luego se evalua seguir.
Esa linea equivale a estas dos

Código
  1. while (seguir)
  2. {
  3. seguir=true;
  4. }

Normalmente el uso correcto es:

Código
  1. while (seguir)
{}  o   
Código
  1. while (seguir==true)

No entiendo como puedes escribir un codigo tan largo como dice sin saber usar expresiones de evaluacion booleanas.  :huh:


Título: Re: Duda (Parar bucle con dato boolean) [bucle while]
Publicado por: Dem0ny en 17 Diciembre 2008, 17:43 pm
bueno bueno, no os tireis al cuello tampoco es pa tanto xDDD

@-Ramc-, tienes razón eso es un fallo que no me di cuenta, que lo escribi rapido, thx por avisar ahora edito :)

@juancho77: Gracias por responder. No eske no supiera de su existencia o que no supiera komo va, sino que, me rayé me ize un lio, y ya esta y no veia claro el tema... no creo que sea para tanto no?.

Gracias de todas maneras, saludos