Foros aprenderaprogramar.com

Aprender a programar => C, C++, C#, Java, Visual Basic, HTML, PHP, CSS, Javascript, Ajax, Joomla, MySql y más => Mensaje iniciado por: paramonso en 18 de Septiembre 2018, 17:23

Título: java.lang.StringIndexOutOfBoundsException: String index out of range: 1 CU00659B
Publicado por: paramonso en 18 de Septiembre 2018, 17:23
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. ;)
Título: Re:java.lang.StringIndexOutOfBoundsException: String index out of range: 1 CU00659B
Publicado por: Ogramar en 12 de Octubre 2018, 20:18
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
Título: Re:java.lang.StringIndexOutOfBoundsException: String index out of range: 1 CU00659B
Publicado por: paramonso en 13 de Octubre 2018, 13:33
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. ;)
Título: Re:java.lang.StringIndexOutOfBoundsException: String index out of range: 1 CU00659B
Publicado por: Ogramar en 05 de Agosto 2019, 21:51
Estoy de acuerdo con las respuestas. Salu2.