[ Foro de Java ]
Hola gente! quería compartir con ustedes como desarrolle este ejercicio y que ustedes hagan lo mismo como para saber de que otras maneras lo pudieron resolver, acá les dejo lo mio: (el enunciado decía así: Ejercicio propuesto 8.1.3: Crea un programa que te pida tu nombre y escriba las letras separadas por espacios. Por ejemplo, a partir de "Nacho" escribirá "N a c h o".)
public static void main(String[] args) {
StringBuffer nombret;
String nombre = null;
byte i;
int j;
System.out.print( "Introduzca su nombre: " );
try {
BufferedReader entrada =
new BufferedReader(new InputStreamReader(System.in));
nombre = entrada.readLine();
}
catch (IOException e) {}
nombret = new StringBuffer(nombre);
j=nombret.length();
for (i=1;i<=j*2;i+=2){
nombret.insert(i, " ");
}
System.out.println(nombret);
}
}
Saludos!
Te estás complicando la vida innecesariamente. Nadie te dice que modifiques la cadena original, sólo que escribas las letras separadas por espacios. Basta con extraer las letras una a una usando un "for":
for (i=0;i<nombre.length();i++){
System.out.print(nombre.CharAt(i));
System.out.print(" ");
}
Hola Nacho, este ejercicio me ha costado mucho, lo habia intentado como tu propones y no me convencia del resultado pues me arrojaba una excepcion al finalizar la ejecucion, espero me puedas ayudar, acontinuacion mi respuesta:
String nombre = "";
int i;
System.out.println("Introduzca su nombre: ");
try{
BufferedReader entrada = new BufferedReader(new InputStreamReader(System.in));
nombre = entrada.readLine();
}
catch (IOException e){}
for (i=0; i<=nombre.length(); i++){
System.out.println(nombre.charAt(i));
System.out.println(" ");
}
El resultado es el siguiente:
Introduzca su nombre:
alex
a
l
e
x
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 4
at java.lang.String.charAt(String.java:646)
at cadenaconespacios.CadenaConEspacios.main(CadenaConEspacios.java:29)
Java Result: 1
BUILD SUCCESSFUL (total time: 2 seconds)
El mensaje de error te dice lo que ocurre: estás desbordando la cadena. No debes ir hasta "length" sino hasta "length-1", de modo que tu "for" debería ser:
for (i=0; i<nombre.length(); i++){
(Ten en cuenta que una cadena que tenga 10 letras irá desde la posición 0 hasta la 9).
Gracias Nacho!
Pero el nombre me sale así:
N
a
c
h
o
y no como especifica el enunciado :/
Porque usas "println", que escribe y avanza de línea, en vez de "print", que sólo escribe, sin avanzar de línea.
Muchas gracias Nacho, ahora lo entiendo, tu curso me gusta mucho, voy entendiendo cosas que antes me parecian complicadas.
Pues ya sabes... a seguir practicando... y a seguir preguntando cuando lo necesites. ;-)
(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)