Autor Tema: Duda con ejemplo del libro Aprender Java desde 0  (Leído 4547 veces)

nestor

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 2
    • Ver Perfil
Duda con ejemplo del libro Aprender Java desde 0
« 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:

Código: [Seleccionar]
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

Código: [Seleccionar]
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());
}

}
« Última modificación: 26 de Julio 2014, 00:49 por Alex Rodríguez »

Jorge lopez

  • Sniper
  • Intermedio
  • ***
  • APR2.COM
  • Mensajes: 248
  • @SniperOfElite
    • Ver Perfil
Re:Duda con ejemplo del libro Aprender Java desde 0
« Respuesta #1 en: 25 de Julio 2014, 05:34 »
 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!
while(estesVivo)
{
  aprende();
  ayuda();
  enseña();
}
if(mueres){teRecordaran();}

nestor

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 2
    • Ver Perfil
Re:Duda con ejemplo del libro Aprender Java desde 0
« Respuesta #2 en: 25 de Julio 2014, 14:54 »
Aclarado. Muchisimas gracias y disculpa, no sabia lo de la tecla con el simbolo #. Era mi primera publicacion en el foro. Un saludo.

Alex Rodríguez

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2050
    • Ver Perfil
Re:Duda con ejemplo del libro Aprender Java desde 0
« Respuesta #3 en: 26 de Julio 2014, 00:48 »
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.

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".