Foros aprenderaprogramar.com

Aprender a programar => Aprender a programar desde cero => Mensaje iniciado por: ronal.d87 en 14 de Junio 2015, 08:03

Título: Java desglosar un texto en letras Ejercicio resuelto con cadenas CU00658B
Publicado por: ronal.d87 en 14 de Junio 2015, 08:03
Hola a todos, he aqui el desarrollo del ejercicio planteado

Citar
Crea una clase con un método main que pida una entrada de teclado y usando un bucle for, el método length de la clase String y el método substring de la clase String, muestre cada una de las letras que componen la entrada. Por ejemplo si se introduce “ave” debe mostrar:

Letra 1: a
Letra 2: v
Letra 3: e

Código: [Seleccionar]
package ejemplo;

import java.util.Scanner;

public class MuestraLetras {
    //metodo constructor
    public MuestraLetras(){
       
    }
   
    public static void main (String [] Argumentos){
       
        System.out.println("Ingrese el texto que quiere desglosar");
        String captura = "";
        Scanner entrada = new Scanner(System.in);
       
        captura = entrada.nextLine();
        //inicio del ciclo for
        for (int i = 0;i<=captura.length();i++){
           
            System.out.println("letra "+(i+1)+": "+captura.substring(0, i+1));
            //hola amigo quise poner este break para controlar la salida del bucle
            //pero no pude
           
            /*if(i == captura.length()){
                break;
            }*/
           
        }
       
    }
   
}

Título: Re:EJERCICIO CU00658B RESUELTO
Publicado por: RaGa en 14 de Junio 2015, 17:29
Hola Ronal:

Estuve analizando tu ejercicio y veo que en tiempo de ejecución lanza un error.

java.lang.StringIndexOutOfBoundsException

y esto sucede porque en un momento se pretende acceder a una posición fuera de los límites del String. En este caso si la palabra que ingresamos tiene 5 letras por ejemplo, se pretende acceder a la sexta letra cuando hacemos (i+1).

La solución sería reescribir el ciclo for de la siguiente manera:

Código: [Seleccionar]
        for (int i = 0;i<captura.length();i++){
            System.out.println("letra "+(i+1)+": "+captura.substring(i, i+1));
        }

Observa que hemos cambiado el límite superior del ciclo for. Ya no es "<=" la condicion sino "<" (esto resuelve el error citado anteriormente).
Y también que hemos cambiado el 0 inicial del substring por "i", de tal manera que substring(i,i+1) vaya devolviendo letra a letra por cada repetición del ciclo.

Otra cosa que te quería comentar (que habías anotado como comentario dentro del cuerpo del programa) es que no es buena política escapar de un ciclo for con break, siempre tataremos de que las salidas de los ciclos for sean por el cumplimiento de la condición especificada por él.


Revísalo y ante cualquier duda aquí estamos para ayudar.
Título: Re:EJERCICIO CU00658B RESUELTO
Publicado por: ronal.d87 en 14 de Junio 2015, 18:36
hola segui tu recomendacion y realize el respectivo cambio

Código: [Seleccionar]
package ejemplo;

import java.util.Scanner;

public class MuestraLetras {
    //metodo constructor
    public MuestraLetras(){
       
    }
   
    public static void main (String [] Argumentos){
       
        System.out.println("Ingrese el texto que quiere desglosar");
        String captura = "";
        Scanner entrada = new Scanner(System.in);
       
        captura = entrada.nextLine();
        //inicio del ciclo for
        for (int i = 0;i<captura.length();i++){           
            System.out.println("letra "+(i+1)+": "+captura.substring(0, i+1));
        }       
    }   
}

Título: Re:EJERCICIO CU00658B RESUELTO
Publicado por: RaGa en 14 de Junio 2015, 18:56
Hola!

Muy bien por el cambio. Faltó hacer un cambio más, también te lo recomendaba en la codificación que te escribí anteriormente.

Tenemos que cambiar el 0 pasado como parámetro inicial del método substring por "i", de tal manera que substring(i,i+1) vaya devolviendo letra por letra en cada repetición del ciclo.

Es decir que la línea:

Código: [Seleccionar]
System.out.println("letra "+(i+1)+": "+captura.substring(0, i+1));
debería ser cambiada por:

Código: [Seleccionar]
System.out.println("letra "+(i+1)+": "+captura.substring(i, i+1));
De esa manera, si tipeamos la palabra Hola, por consola se nos mostrará:

letra 1: H
letra 1: o
letra 1: l
letra 1: a

que es lo que se nos pedía en el ejercicio.

Analízalo y cualquier duda seguimos resolviéndolo.
Título: Re:EJERCICIO CU00658B RESUELTO
Publicado por: RaGa en 14 de Junio 2015, 18:59
Perdón, por consola se mostraría:

Hola
letra 1: H
letra 2: o
letra 3: l
letra 4: a

(me había equivocado en mi anterior respuesta donde siempre decia "letra 1" jeje.  ;D)
Título: Re:EJERCICIO CU00658B RESUELTO
Publicado por: ronal.d87 en 14 de Junio 2015, 19:10
ok pense que se veia el resultado en forma de piramide

Código: [Seleccionar]
package ejemplo;

import java.util.Scanner;

public class MuestraLetras {
    //metodo constructor
    public MuestraLetras(){
       
    }
   
    public static void main (String [] Argumentos){
       
        System.out.println("Ingrese el texto que quiere desglosar");
        String captura = "";
        Scanner entrada = new Scanner(System.in);
       
        captura = entrada.nextLine();
        //inicio del ciclo for
        for (int i = 0;i<captura.length();i++){           
            System.out.println("letra "+(i+1)+": "+captura.substring(i, i+1));
        }       
    }   
}

Título: Re:EJERCICIO CU00658B RESUELTO
Publicado por: RaGa en 15 de Junio 2015, 03:03
Ahora si perfecto Ronal! A seguir adelante!