Autor Tema: Java desglosar un texto en letras Ejercicio resuelto con cadenas CU00658B  (Leído 5957 veces)

ronal.d87

  • Principiante
  • **
  • Mensajes: 72
    • Ver Perfil
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;
            }*/
           
        }
       
    }
   
}

« Última modificación: 18 de Junio 2015, 15:24 por Alex Rodríguez »
Ronald Mosquera Mancilla

RaGa

  • Moderador Global
  • Intermedio
  • *******
  • APR2.COM
  • Mensajes: 234
    • Ver Perfil
Re:EJERCICIO CU00658B RESUELTO
« Respuesta #1 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.

ronal.d87

  • Principiante
  • **
  • Mensajes: 72
    • Ver Perfil
Re:EJERCICIO CU00658B RESUELTO
« Respuesta #2 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));
        }       
    }   
}

Ronald Mosquera Mancilla

RaGa

  • Moderador Global
  • Intermedio
  • *******
  • APR2.COM
  • Mensajes: 234
    • Ver Perfil
Re:EJERCICIO CU00658B RESUELTO
« Respuesta #3 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.

RaGa

  • Moderador Global
  • Intermedio
  • *******
  • APR2.COM
  • Mensajes: 234
    • Ver Perfil
Re:EJERCICIO CU00658B RESUELTO
« Respuesta #4 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)

ronal.d87

  • Principiante
  • **
  • Mensajes: 72
    • Ver Perfil
Re:EJERCICIO CU00658B RESUELTO
« Respuesta #5 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));
        }       
    }   
}

Ronald Mosquera Mancilla

RaGa

  • Moderador Global
  • Intermedio
  • *******
  • APR2.COM
  • Mensajes: 234
    • Ver Perfil
Re:EJERCICIO CU00658B RESUELTO
« Respuesta #6 en: 15 de Junio 2015, 03:03 »
Ahora si perfecto Ronal! A seguir adelante!

 

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