Buscar
Social
Ofertas laborales ES

Foro sobre Java SE > Ayuda con un bucle do...While.

Hola a todos, la verdad que lo que me pasa no se muy bien el porqué pero creo un bucle do... while y el primer "do" me imprime por consola sin problemas pero al verificar el while que es verdadero y a la hora de repetir las sentencias dentro del do, me salta un System.out.println, bueno no lo salta, sino que lo imprime pero el código para introducir por consola la información se la salta pasando a la siguiente sentencia. El código es el siguiente:

import java.util.Scanner;

class PruebaBucle{
public static void main(String[] args) {
Scanner miScanner = new Scanner(System.in);
String descripcion;
double precio;
int unidades;
String respuesta;

System.out.println("Pedidos");

do{

System.out.println("Introduce la descripcion del producto");
descripcion = miScanner.nextLine();

System.out.println("Introduce el precio del producto");
precio = miScanner.nextDouble();

System.out.println("Introduce las unidades");
unidades = miScanner.nextInt();

System.out.println("Desea continuar?:");
respuesta = miScanner.next();

}while(respuesta!="n");
}
}


Al comprobar que el while es verdadero estas sentencias: System.out.println("Introduce la descripcion del producto");
descripcion = miScanner.nextLine();
las salta, no me deja introducir por consola la descripcion y pasa al println "Introduce precio del producto". Alguien sabe porqué me sucede eso? Muchas gracias

mayo 11, 2016 | Registered Commentertarsius17

Para saber si dos cadenas son iguales o no, no se usa == ó !=, sino el método equals.
Cuando usas los peradores ==, != lo que haces es checar si son el mismo objeto, no si su información es la misma; puede haber dos objetos con el mismo contenido pero eso no significa que sean el mismo objeto. Te dejo este link para que comprendas mejor la diferencia entre igualdad e identidad:

http://aprenderaprogramar.com/index.php?option=com_content&view=article&id=628:el-metodo-equals-en-java-diferencia-entre-igualdad-e-identidad-comparar-objetos-ejemplos-cu00662b&catid=68:curso-aprender-programacion-java-desde-cero&Itemid=188

Creo que no aparecen algunas imágenes de la explicación en el artículo, pero puedes descargar el pdf en el siguiente link:

http://aprenderaprogramar.com/index.php?option=com_attachments&task=download&id=569

mayo 12, 2016 | Registered Commenterangelns

Amigo, ese error de salto de linea es muy común cuando utilizas un nextInt, y despues utilizas unextLine, creo que se ensucia la cache o algo asi. Para solucionarlos solo tienes que poner miScanner.skip("\n"); justo debajo de la respuesta, y ya no tendra el salto de linea, mira aquí el codigo hecho ya:

public static void main(String[] args) {
Scanner miScanner = new Scanner(System.in);
String descripcion;
double precio;
int unidades;
String respuesta;

System.out.println("Pedidos");

do{

System.out.println("Introduce la descripcion del producto");
descripcion = miScanner.nextLine();

System.out.println("Introduce el precio del producto");
precio = miScanner.nextDouble();

System.out.println("Introduce las unidades");
unidades = miScanner.nextInt();

System.out.println("Desea continuar?:");
respuesta = miScanner.next();
miScanner.skip("\n");

}while(respuesta!="no");
}

mayo 13, 2016 | Unregistered CommenterSimon

Amigo, olvide decirte, y para lo del error del final, para comparar ambas cadenas, no puedes utilizar !=, ya que eso es para comparar números, para cadenas de texto utilizas esto: !respuesta.equals("no"), mira aqui tienes el codigo 100% funcionando sin ningun error:

class PruebaBucle{
public static void main(String[] args) {
Scanner miScanner = new Scanner(System.in);
String descripcion;
double precio;
int unidades;
String respuesta;

System.out.println("Pedidos");

do{

System.out.println("Introduce la descripcion del producto");
descripcion = miScanner.nextLine();

System.out.println("Introduce el precio del producto");
precio = miScanner.nextDouble();

System.out.println("Introduce las unidades");
unidades = miScanner.nextInt();

System.out.println("Desea continuar?:");
respuesta = miScanner.next();
miScanner.skip("\n");

}while(!respuesta.equals("no"));
}
}

mayo 13, 2016 | Registered Commentersimondusk