Foros aprenderaprogramar.com
Aprender a programar => Aprender a programar desde cero => Mensaje iniciado por: Dan_SB en 02 de Abril 2015, 22:06
-
Buenas tardes!
Capitulo siguiente! con el mismo enunciado solo que en vez de for, ahora es While:
Clase SeparaCadena actualizada:
public class SeparaCadena {
public SeparaCadena(){}
public String Lectura(){
Scanner lee = new Scanner(System.in);
String dato;
dato = lee.nextLine();
return dato;
}
public void SeparaCaracteres(){
String data;
int j = 0, i = 0, num;
SeparaCadena Funciones = new SeparaCadena();
System.out.println("Ingresa una frase: ");
data = Funciones.Lectura();
num = data.length();
while(i < num){
System.out.println(data.substring(j, i+1));
j++;
i++;
}
}
}
(http://i.imgur.com/oHZb0uR.png)
Muchas gracias!!
-
Puedes mejorarlo tomando como referencia los consejos que te e dejado en el siguiente hilo: https://www.aprenderaprogramar.com/foros/index.php?topic=2278.0 (https://www.aprenderaprogramar.com/foros/index.php?topic=2278.0)
Saludos!!
-
Buenas otra vez Jorge
Okay, tome apuntes muy útiles de este comentario, vaya cabeza dura que fui en tener que crear otra variable. Pero creo que ahora si lo necesitare para los de la "Letra 1, Letra 2..."
Problema con for:
Clase SeparaCadena:
package DesCaracteres;
import java.util.Scanner;
public class SeparaCadena {
static int num;
public SeparaCadena(){}
public String Lectura(){
Scanner lee = new Scanner(System.in);
return lee.nextLine();
}
public void SeparaCaracteres(){
for(int i = 0, j = 1; i < num; i++, j++){
System.out.println("Letra " + j + ": " + Main.data.substring(i, i+1));
}
}
}
Clase main:
package DesCaracteres;
public class Main {
static String data;
public static void main (String[]args){
SeparaCadena operacion = new SeparaCadena();
System.out.println("Ingresa una frase: ");
data = operacion.Lectura();
SeparaCadena.num = data.length();
operacion.SeparaCaracteres();
}
}
Problema con while:
Clase SeparadorCadena:
package DesCaracteres;
import java.util.Scanner;
public class SeparaCadena {
static int num;
public SeparaCadena(){}
public String Lectura(){
Scanner lee = new Scanner(System.in);
return lee.nextLine();
}
public void SeparaCaracteres(){
int j = 1, i = 0;
while(i < num){
System.out.println("Letra " + j + ": " + Main.data.substring(i, i+1));
i++;
j++;
}
}
}
Clase Main
package DesCaracteres;
public class Main {
static String data;
public static void main (String[]args){
SeparaCadena operacion = new SeparaCadena();
System.out.println("Ingresa una frase: ");
data = operacion.Lectura();
SeparaCadena.num = data.length();
operacion.SeparaCaracteres();
}
}
Corre exactamente igual en los 2:
(http://i.imgur.com/zBcJq3d.png)
Asi que en el main puedo escribir un menu... es que anteriormente (y leido) en el main debía tener la menor cantidad de código posible...
Muchas gracias por tu ayuda!
-
vaya cabeza dura que fui en tener que crear otra variable. Pero creo que ahora si lo necesitare para los de la "Letra 1, Letra 2..."
prueba esto: (eliminamos la variable j) public void SeparaCaracteres(){
for(int i = 0; i < num; i++){
System.out.println("Letra " + (i+1) + ": " + Main.data.substring(i, i+1));
}
}
Asi que en el main puedo escribir un menu... es que anteriormente (y leido) en el main debía tener la menor cantidad de código posible...
Si es cierto que el método main debería de contener la menor cantidad de código posible, pero no por eso vamos a delegar tareas propias del método main (método principal que dirige el programa) a otros métodos que deben de realizar solo lo que dicen que son o que hacen. Por ejemplo, un método para recibir una entrada de datos por teclado no debe de saludar al usuario,pedirle que escriba una frase y dar detalles al usuario sobre lo escrito, lo correcto es que el mensaje de saludo y de pedir que se escriba algo lo muestre el main y que el método entradaPorTeclado solo habilite el espacio de escritura. Todo debe de ser un equilibrio que iras puliendo conforme crescas como programador.
En la clase SeparaCadena (ambas) encontramos la siguiente linea de código:
System.out.println("Letra " + (i+1) + ": " + Main.data.substring(i, i+1));
Esto es un mal diseño de clase, la cabeza dirige al cuerpo pero el cuerpo no a la cabeza, la clase con main puede usar cualquier otra clase a su disposición, pero otras clases no deben de usar la clase con main.
Edito y comento tus 2 clases que usan un bucle for:
Clase SeparaCadena:
import java.util.Scanner;
public class SeparaCadena {
//static int num; esta variable no es necesaria declararla ni estatica ni como variable de clase, mas bien sera una variable local al metodo SeparaCaracteres(String data);
public SeparaCadena(){}
public String lectura(){
Scanner lee = new Scanner(System.in);
return lee.nextLine();
}
public void separaCaracteres(String data){//Agregamos el parámetro String data, que sera lo escrito por el usuario
int num = data.length();
for(int i = 0; i < num; i++){
System.out.println("Letra " + (i+1) + ": " + data.substring(i, i+1)); //Eliminamos la variable j, y aprovechamos al máximo la variable i
}
}
}
Clase Main:
public class Main {
//static String data; esta variable no es necesaria declararla estatica ni como campo de clase, mas bien sera una variable local al método main
public static void main (String[]args){
String data;
SeparaCadena operacion = new SeparaCadena();
System.out.println("Ingresa una frase:\n");
data = operacion.lectura();
System.out.println("");
operacion.separaCaracteres(data);
}
}
Saludos!!
-
Okay!! Tomo apuntes de esto. Ya se que el cuerpo no puede dirigir la cabeza...!
Con lo de la J, perdón otra vez, Falle jajaja
Gracias!