Autor Tema: java.lang.StringIndexOutOfBoundsException: String index out of range: 1 CU00659B  (Leído 7362 veces)

paramonso

  • Intermedio
  • ***
  • Mensajes: 241
  • El ignorante afirma, el sabio duda y reflexiona.
    • Ver Perfil
Hola. Dejo el  Ejercicio resuelto (CU00659B).Tema While y do while en Java (ciclos o bucles) del tutorial gratuito de programación orientada a objetos.

Código: [Seleccionar]
import java.util.Scanner; //Importación del código de la clase Scanner desde la biblioteca Java
//Código de nuestra clase principal ejemplo aprenderaprogramar.com
public class EjercicicioCU00659B {
    public static void main (String [ ] args) {
         System.out.print("BUCLES DO..... WHILE\n\n");
        System.out.print ("Empezamos el programa\n");
        System.out.print ("Por favor introduzca una cadena por teclado:\n ");
        String entradaTeclado = "";
        Scanner entradaEscaner = new Scanner (System.in); //Creación de un objeto Scanner
        entradaTeclado = entradaEscaner.nextLine (); //Invocamos un método sobre un objeto Scanner
                                                     //y se obtiene un string introducido por el teclado
       int i=0;
       do {
           System.out.print("Letra " + (i+1) + ": ");
           System.out.print(entradaTeclado.substring(0+i,i+1) +"\n");
           i +=1;
        }
        while(i<entradaTeclado.length());
    } //Cierre del main
} //Cierre de la clase

Gracias. ;)
« Última modificación: 12 de Octubre 2018, 20:16 por Ogramar »

Ogramar

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2660
    • Ver Perfil
Buenas, todo bien, el código cumple con lo que se pedía. Como comentamos en otro hilo, 0+i es lo mismo que i, luego sobra sumarle cero ;) Aunque no es objeto de este ejercicio dejo alguna pregunta planteada para quien quiera responderla. Si cuando nos pide la cadena pulsamos enter directamente (sin introducir ningún carácter), salta un error

java.lang.StringIndexOutOfBoundsException: String index out of range: 1

¿Por qué? ¿Cómo podríamos mejorar el código para que no salte ese error?

Otra curiosidad: en la octava línea, entre usar String entradaTeclado = ""; y String entradaTeclado; ¿Cuál es la diferencia? ¿Qué efecto tiene en el programa hacerlo de una manera u otra?

Salu2

paramonso

  • Intermedio
  • ***
  • Mensajes: 241
  • El ignorante afirma, el sabio duda y reflexiona.
    • Ver Perfil
Hola Ogramar. Buenas preguntas. Voy a intentar darles respuestas.

Si cuando nos pide la cadena pulsamos enter directamente (sin introducir ningún carácter), salta un error
java.lang.StringIndexOutOfBoundsException: String index out of range: 1
¿Por qué?
Por que hay un indice fuera de rango o sea que se ha excedido el numero de indices del array o elemento que utiliza los indices.
¿Cómo podríamos mejorar el código para que no salte ese error?
Con un condicional.
Preguntando ( en este caso en concreto que salta el error cuando no hay elementos en la matriz) si la longitud de ese array o elemento es cero que no ejecute la siguiente instrucción del programa. En otros casos habría que analizar que no entrase en la instrucción si se excede la matriz.

int i=0;
       do {
           System.out.print("Letra " + (i) + ": ");
           if(entradaTeclado.length()!=0){
           System.out.print(entradaTeclado.substring(i,i+1) +"\n");
        }
           i +=1;
        }
        while(i<entradaTeclado.length());

Otra curiosidad: en la octava línea, entre usar String entradaTeclado = ""; y String entradaTeclado; ¿Cuál es la diferencia?
Ninguna.
Ya que si no se inicializan las variables, por defecto Java las inicializa a cero o null.
Pero es una buena practica acostumbrarse a inicializar las variables antes de su uso para evitarnos errores.

 ¿Qué efecto tiene en el programa hacerlo de una manera u otra?
El efecto es el mismo se inicialice así  String entradaTeclado = "" o así  String entradaTeclado
.Como comento en la pregunta anterior, Java las inicia con valores nulos, vacíos o a cero.


Un saludo. ;)
« Última modificación: 05 de Agosto 2019, 21:50 por Ogramar »

Ogramar

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2660
    • Ver Perfil
Estoy de acuerdo con las respuestas. Salu2.

 

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".