2011-10-05 16 views
5

Estoy haciendo un ejercicio escolar y no sé cómo hacer una cosa. Por lo que he leído, Scanner no es la mejor manera, pero como el maestro solo usa Scanner, debe hacerlo usando Scanner.Java deja de leer después de la línea en blanco

Este es el problema. El usuario ingresará texto a una matriz. Esta matriz puede ir hasta 10 líneas y las entradas del usuario finalizan con una línea vacía.

he hecho esto:

String[] text = new String[11] 
Scanner sc = new Scanner(System.in); 
int i = 0; 
System.out.println("Please insert text:"); 
while (!sc.nextLine().equals("")){ 
     text[i] = sc.nextLine(); 
     i++;   
    } 

Pero esto no funciona correctamente y no puedo entenderlo. Idealmente, si el usuario introduce:

This is line one 
This is line two 

y ahora pulsa ENTER, Wen impresión de la matriz se debe dar:

[This is line one, This is line two, null,null,null,null,null,null,null,null,null] 

¿Me puede ayudar?

Respuesta

8
while (!sc.nextLine().equals("")){ 
     text[i] = sc.nextLine(); 
     i++;   
} 

Esto lee dos líneas de su entrada: una que se compara con la cadena vacía, y luego otro para almacenar realmente en la matriz. ¿Quieres poner la línea en una variable de modo que se esté examinando y tratando con la misma String en ambos casos:

while(true) { 
    String nextLine = sc.nextLine(); 
    if (nextLine.equals("")) { 
     break; 
    } 
    text[i] = nextLine; 
    i++; 
} 
+0

Muchos Gracias por tu explicación. Eso funcionó – Favolas

+1

No olvide la entrada máxima de 10 líneas en su pausa de tiempo. –

+0

@XenoLupus Sí. No lo olvidé, pero de todos modos muchas gracias – Favolas

1

Aquí está la lingüística típica readline, aplicado a su código:

String[] text = new String[11] 
Scanner sc = new Scanner(System.in); 
int i = 0; 
String line; 
System.out.println("Please insert text:"); 
while (!(line = sc.nextLine()).equals("")){ 
    text[i] = line; 
    i++;   
} 
Cuestiones relacionadas