Foros del Web » Programación para mayores de 30 ;) » Java »

[SOLUCIONADO] Problema programa DVDCine

Estas en el tema de Problema programa DVDCine en el foro de Java en Foros del Web. Primero expongo el código y luego mi problema: Dispnogo de DVDCine.java: @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código Java: Ver original public class DVDCine {     String título ...
  #1 (permalink)  
Antiguo 25/02/2013, 05:43
 
Fecha de Ingreso: noviembre-2012
Ubicación: Adra
Mensajes: 36
Antigüedad: 11 años, 5 meses
Puntos: 0
Problema programa DVDCine

Primero expongo el código y luego mi problema:

Dispnogo de DVDCine.java:

Código Java:
Ver original
  1. public class DVDCine {
  2.     String título;
  3.     String director;
  4.     String productor;
  5.     String protagonistas;
  6.     String género;
  7.     int duración;
  8.     String resumen;
  9.    
  10.     DVDCine(String título, String director, String productor, String protagonistas, String género, int duración, String resumen){
  11.         this.título=título;
  12.         this.director=director;
  13.         this.productor=productor;
  14.         this.protagonistas=protagonistas;
  15.         this.género=género;
  16.         this.duración=duración;
  17.         this.resumen=resumen;
  18.     }
  19.     String muestraDuración(){
  20.         return duración+" min.";
  21.     }
  22.     String muestraDVDCine(){
  23.         return título.toUpperCase()+"\nDe: "+director+"\nProducción: "+productor+"\nCon: "+protagonistas+"\n"+género+"-"+muestraDuración()+"\nResumen:\n "+resumen;
  24.     }
  25.     boolean esThriller(){
  26.         if(género=="Thriller")
  27.             return true;
  28.         else
  29.             return false;
  30.     }
  31.     boolean tieneResumen(){
  32.         return resumen.length()>0;
  33.     }
  34. }

Y del archivo GestionaDVDCine.java:

Código Java:
Ver original
  1. import java.util.*;
  2. public class GestionaDVDCine {
  3.     public static void main(String args []){
  4.         Scanner sc=new Scanner(System.in);
  5.         System.out.print("Título: ");
  6.         String título=sc.nextLine();
  7.         System.out.print("Director: ");
  8.         String director=sc.nextLine();
  9.         System.out.print("Productor: ");
  10.         String productor=sc.nextLine();
  11.         System.out.print("Protagonistas: ");
  12.         String protagonistas=sc.nextLine();
  13.         System.out.print("Género: ");
  14.         String género=sc.nextLine();
  15.         System.out.print("Duración: ");
  16.         int duración=sc.nextInt();
  17.         System.out.println("Resumen: "); //AQUÍ NO ME DA LA OPCIÓN DE INTRODUCIR TEXTO POR TECLADO
  18.         String resumen=sc.nextLine();
  19.        
  20.         DVDCine pelicula=new DVDCine(título, director, productor, protagonistas, género, duración, resumen);
  21.        
  22.         System.out.print(pelicula.muestraDVDCine());
  23.        
  24.        
  25.     }
  26. }

El resultado de este programa debería de ser:

NOMBRE DE LA PEL穩CULA
De: Woody Allen
Producción: WB Estudios
Con: Woody Allen y Ben Aflek
Acci籀n-120 min.
Resumen: Esta película ha sido ganadora de 3 oscars..


Bien ahora paso a explicar mi problema:

Cuando introduzco el penultimo atributo (duración) automaticamente se salta el Resumen y finaliza el programa. He revisado el código varias veces pero no soy capaz de dar con el problema.

Estaría muy agradecido si alguien pudiese decirme que está mal. Muchas gracias.

Última edición por rufi88; 25/02/2013 a las 06:20
  #2 (permalink)  
Antiguo 25/02/2013, 08:45
Avatar de Xerelo  
Fecha de Ingreso: mayo-2009
Mensajes: 2.175
Antigüedad: 15 años
Puntos: 306
Respuesta: Problema programa DVDCine

Cuando introduces un Int, también estás introduciendo un /n, por lo que te lo asigna a resumen.

Cita:
System.out.print("Duración: ");
int duración=sc.nextInt();
sc.nextLine();
System.out.println("Resumen: "); //AQUÍ NO ME DA LA OPCIÓN DE INTRODUCIR TEXTO POR TECLADO
String resumen=sc.nextLine();
__________________
Cada vez que solucionas los problemas de alguien que no se esfuerza, piensa en que el día de mañana puede llegar a ser tu compañero de trabajo, o peor, tu jefe.
  #3 (permalink)  
Antiguo 25/02/2013, 11:33
 
Fecha de Ingreso: noviembre-2012
Ubicación: Adra
Mensajes: 36
Antigüedad: 11 años, 5 meses
Puntos: 0
Respuesta: Problema programa DVDCine

Funciona aunque no termino de comprender el arreglo.

¿Por que un /n que simplemente es un salto de linea textual impide que el programa lea el ultimo sc.nextLine()?

Cita:
System.out.println("Resumen: "); //AQUÍ NO ME DA LA OPCIÓN DE INTRODUCIR TEXTO POR TECLADO
String resumen=sc.nextLine();
  #4 (permalink)  
Antiguo 25/02/2013, 13:49
Avatar de Xerelo  
Fecha de Ingreso: mayo-2009
Mensajes: 2.175
Antigüedad: 15 años
Puntos: 306
Respuesta: Problema programa DVDCine

Cuando utilizas next(), nextInt(), etc siempre tiene que existir un valor por lo que \n no es válido, pero queda almacenado en el buffer hasta que aparezcan nuevos datos.

Sin embargo nextLine() recoge todos los caracteres hasta que encuentra un \n, que forma parte de la línea por lo que no queda almacenado, porque una línea sí puede estar vacía.

Cuando vienes de un nextInt en el buffer de Scanner hay un \n, y nextLine() lo interpreta como una línea vacía.

Puedes comprobar la diferencia entre pulsar sólo enter con nextInt y nextLine.

Creo que es algo que deberían corregir, su funcionamiento lleva a confusión.
__________________
Cada vez que solucionas los problemas de alguien que no se esfuerza, piensa en que el día de mañana puede llegar a ser tu compañero de trabajo, o peor, tu jefe.
  #5 (permalink)  
Antiguo 25/02/2013, 14:15
 
Fecha de Ingreso: noviembre-2012
Ubicación: Adra
Mensajes: 36
Antigüedad: 11 años, 5 meses
Puntos: 0
Respuesta: Problema programa DVDCine

Ahora si te he entendido. Gracias por tu tiempo.

Duda solucionada.

Etiquetas: programa, string
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 05:58.