Autor Tema: Deletrear palabras con Java (CU00659B), While y do while (ciclos o bucles).  (Leído 6864 veces)

Dan_SB

  • Avanzado
  • ****
  • Mensajes: 273
  • *<DanielsCK>*
    • Ver Perfil
Buenas tardes!

Capitulo siguiente! con el mismo enunciado solo que en vez de for, ahora es While:

Clase SeparaCadena actualizada:

Código: [Seleccionar]
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++;
    }
}
}



Muchas gracias!!
« Última modificación: 05 de Abril 2015, 23:55 por Alex Rodríguez »
"Luchar por tus sueños y cumplirlos... eso es vivir.."

Jorge lopez

  • Sniper
  • Intermedio
  • ***
  • APR2.COM
  • Mensajes: 248
  • @SniperOfElite
    • Ver Perfil
Re:Ejercicio (CU00659B), While y do while en Java (ciclos o bucles).
« Respuesta #1 en: 03 de Abril 2015, 16:40 »
 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

Saludos!!
while(estesVivo)
{
  aprende();
  ayuda();
  enseña();
}
if(mueres){teRecordaran();}

Dan_SB

  • Avanzado
  • ****
  • Mensajes: 273
  • *<DanielsCK>*
    • Ver Perfil
Re:Ejercicio (CU00659B), While y do while en Java (ciclos o bucles).
« Respuesta #2 en: 03 de Abril 2015, 18:16 »
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:
Código: [Seleccionar]
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:
Código: [Seleccionar]
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:

Código: [Seleccionar]
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

Código: [Seleccionar]
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:




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!
"Luchar por tus sueños y cumplirlos... eso es vivir.."

Jorge lopez

  • Sniper
  • Intermedio
  • ***
  • APR2.COM
  • Mensajes: 248
  • @SniperOfElite
    • Ver Perfil
Re:Ejercicio (CU00659B), While y do while en Java (ciclos o bucles).
« Respuesta #3 en: 03 de Abril 2015, 21:50 »
Citar
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)
Código: [Seleccionar]
public void SeparaCaracteres(){
    for(int i = 0; i < num; i++){
        System.out.println("Letra " + (i+1) + ": " + Main.data.substring(i, i+1));
    }   
}

Citar
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:
Código: [Seleccionar]
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:
Código: [Seleccionar]
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!!
while(estesVivo)
{
  aprende();
  ayuda();
  enseña();
}
if(mueres){teRecordaran();}

Dan_SB

  • Avanzado
  • ****
  • Mensajes: 273
  • *<DanielsCK>*
    • Ver Perfil
Re:Ejercicio (CU00659B), While y do while en Java (ciclos o bucles).
« Respuesta #4 en: 04 de Abril 2015, 01:44 »
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!
"Luchar por tus sueños y cumplirlos... eso es vivir.."

 

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