Foros aprenderaprogramar.com
Aprender a programar => Aprender a programar desde cero => Mensaje iniciado por: ronal.d87 en 14 de Junio 2015, 08:03
-
Hola a todos, he aqui el desarrollo del ejercicio planteado
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
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;
}*/
}
}
}
-
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:
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.
-
hola segui tu recomendacion y realize el respectivo cambio
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!
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:
System.out.println("letra "+(i+1)+": "+captura.substring(0, i+1));
debería ser cambiada por:
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.
-
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)
-
ok pense que se veia el resultado en forma de piramide
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));
}
}
}
-
Ahora si perfecto Ronal! A seguir adelante!