Foros aprenderaprogramar.com
Aprender a programar => Aprender a programar desde cero => Mensaje iniciado por: nestor en 24 de Julio 2014, 13:42
-
Hola, en la pagina 107 del libro hay 2 clases. Las he copiado tal cual y al compilar no hay errores ni nada, pero cuando voy a introducir cadenas tengo que escribir darle al enter volver a escribir y darle al enter para introducir la primera cadena. Asi tengo que hacer con el resto de cadenas. No entiendo porque. No deberia ser todo seguido. Introduces una cadena le das al enter y ya te pide que insertes la siguiente cadena? Espero puedan ayudar con esta duda. Un saludo.
Clase EntradaTeclado:
import java.util.Scanner;
public class EntradaDeTeclado {
private String entradaTeclado;
public EntradaDeTeclado(){
entradaTeclado = "";
pedirEntrada();
}
public void pedirEntrada(){
Scanner entradaScanner = new Scanner(System.in);
entradaTeclado = entradaScanner.nextLine();
}
public String getEntrada() {
return entradaTeclado;
}
public String getPrimeraPalabra(){
for(int i = 0; i < entradaTeclado.length() - 1; i++){
if(entradaTeclado.substring(i, i + 1).equals(" ")){
return entradaTeclado.substring(0, i + 1);
}
}
return entradaTeclado;
}
public int getLongitud(){
return entradaTeclado.length();
}
}
Clase Test
public class TestEntradaDeTeclado {
public static void main(String[] args) {
System.out.println("Empezamos el programa");
System.out.println("Por favor introduzca la entrada 1");
EntradaDeTeclado entrada1 = new EntradaDeTeclado();
entrada1.pedirEntrada();
System.out.println("Por favor introduzca la entrada 2");
EntradaDeTeclado entrada2 = new EntradaDeTeclado();
entrada2.pedirEntrada();
System.out.println("Por favor introduzca la entrada 3");
EntradaDeTeclado entrada3 = new EntradaDeTeclado();
entrada3.pedirEntrada();
System.out.println("Gracias");
System.out.println("La entrada 1 ha sido: " + entrada1.getEntrada() + " y consta de " + entrada1.getLongitud() + " caracteres");
System.out.println("La entrada 2 ha sido: " + entrada2.getEntrada() + " y consta de " + entrada2.getLongitud() + " caracteres");
System.out.println("La entrada 3 ha sido: " + entrada3.getEntrada() + " y consta de " + entrada3.getLongitud() + " caracteres");
System.out.println("La primera palabra de la entrada 1 es " + entrada1.getPrimeraPalabra());
System.out.println("La primera palabra de la entrada 2 es " + entrada2.getPrimeraPalabra());
System.out.println("La primera palabra de la entrada 3 es " + entrada3.getPrimeraPalabra());
}
}
-
Hola nestor!
recuerda siempre que escribas código en el foro, pulsar antes la tecla con el símbolo # y a continuación escribir el código en medio de las dos etiquetas que te saldrán
[cod]aqui tu código[/cod].
Por otra parte e verificado el código que as suministrado, y estoy de acuerdo con lo que indicas, al ejecutar el método main en principio te pide introducir la entrada 1 y al pulsar enter salta a otra entrada de teclado sin indicaciones, al pulsar enter luego de estas dos entradas entonces pide introducir la entrada 2 y así sucesivamente hasta completar 6 entradas en lugar de 3 entradas.
Si te fijas las entradas reales, o mas bien las que se están almacenando son las entradas 2, 4 y 6. Las entradas 1, 3 y 5 surgen debido a que en el método main se han creado 3 objetos de tipo EntradaDeTeclado y puesto que en el constructor de la clase EntradaDeTeclado se a inicializado el metodo pedirEntrada(); al crear un objeto de tipo EntradaDeTeclado en el metodo main mediante la sentencia: EntradaDeTeclado entrada1 = new EntradaDeTeclado(); y luego declarar entrada1.pedirEntrada(); lo que esta pasando es que sale por pantalla tanto la entrada que trae el objeto como la entrada que se declara directamente con la sentencia: entradaX.pedirEntrada();
Para corregir esto yo plantearía 2 opciones.
Opción 1: No inicializar el método pedirEntrada(); en el constructor de la clase EntradaDeTeclado.
Opcion 2: Si inicializar el método pedirEntrada(); en el constructor de la clase EntradaDeTeclado, pero no declarar la sentencia entradaX.pedirEntrada(); en el método main.
Ambas opciones corregirían el problema el cual se podría catalogar como un descuido de programación.
Espero a ver aclarado tu duda.
Salu2!
-
Aclarado. Muchisimas gracias y disculpa, no sabia lo de la tecla con el simbolo #. Era mi primera publicacion en el foro. Un saludo.
-
Hola, lo planteado por Sniper es correcto. Entre las dos opciones planteadas la que me parece más correcta es comentar o borrar en el constructor de la clase EntradaDeTeclado la invocación del método pedirEntrada();
public EntradaDeTeclado(){
entradaTeclado = "";
//pedirEntrada();
}
De este modo se corrige el error de existir una duplicidad en la petición.
Saludos.