Foros aprenderaprogramar.com

Aprender a programar => C, C++, C#, Java, Visual Basic, HTML, PHP, CSS, Javascript, Ajax, Joomla, MySql y más => Mensaje iniciado por: pedro,, en 29 de Mayo 2015, 00:36

Título: Java ¿cómo dividir el código en clases? ¿cómo poner nombre de clases? CU00662B
Publicado por: pedro,, en 29 de Mayo 2015, 00:36
Hola, este es mi primer post, hasta ahora no me había surgido ninguna duda, pero este ejercicio mas que tener dudas fue que se me ocurrieron muchas formas de resolverlo, aquí pongo la mas corta de las que se me ocurrieron.

Código: [Seleccionar]
import java.util.Scanner;
public class Java62Ejercicio {
    public static void main (String [] args) {
        System.out.println ("Introduce una palabra 1:");
        String palabra1 = "";
        Scanner entradaEscaner1 = new Scanner (System.in);
        palabra1 = entradaEscaner1.nextLine ();
        System.out.println ("Introduce una palabra 2:");
        String palabra2 = "";
        Scanner entradaEscaner2 = new Scanner (System.in);
        palabra2 = entradaEscaner2.nextLine ();
        int i=0;
        if (palabra1.length()>=palabra2.length()) {
            while (i<palabra2.length()) {
                if (palabra1.substring(i, i+1).equals(palabra2.substring(i, i+1))){
                    System.out.println("¿Letra " + (i+1) + " igual en las dos palabras? True");
                } else {
                    System.out.println("¿Letra " + (i+1) + " igual en las dos palabras? False");
                }
                i++;
            }
            while (i<palabra1.length()) {
               System.out.println("La palabra 2 no tiene letra " + (i+1) + ".");
               i++;
            }
        } else if (palabra2.length()>=palabra1.length()) {
            i=0;
            while (i<palabra1.length()) {
                if (palabra1.substring(i, i+1).equals(palabra2.substring(i, i+1))){
                    System.out.println("¿Letra " + (i+1) + " igual en las dos palabras? True");
                } else {
                    System.out.println("¿Letra " + (i+1) + " igual en las dos palabras? False");
                }
                i++;
            }
            while (i<palabra2.length()) {
               System.out.println("La palabra 1 no tiene letra " + (i+1) + ".");
               i++;
            }
        }
    }

también estuve intentando la posibilidad de hacerlo en dos clases, pero no fui capaz de sacar nada en claro.
Título: Re:Java Revisión Ejercicio (CU00662B)
Publicado por: DRANXZ88 en 29 de Mayo 2015, 17:55
yo lo resolví de otra forma como nos enseña en el tutorial porque es orientado a objeto no es extructurada te envio lo código aunque en mi código le falta cambiar los nombre nomas para que diga mejor lo que realiza
calse para recoger la letra
Código: [Seleccionar]
package ejercicioscu00662b;

public class VerificarLetra {

    public void comprobarLetra(String palabra_1, String palabra_2) {
        int limiteSup;
        int limiteInf;
        int text;

        if (palabra_1.length() > palabra_2.length()) {
            limiteInf = palabra_1.length();
            text = 2;
            limiteSup = palabra_2.length();
        } else {
            limiteInf = palabra_2.length();
            text = 1;
            limiteSup = palabra_1.length();
        }
        for (int i = 0; i < limiteSup; i++) {
            if (i < limiteInf) {
                System.out.println("¿Letra " + (i + 1) + " igual en las dos palabras? " + (palabra_1.substring(i, i + 1).equals(palabra_2.substring(i, i + 1))));
            } else {
                System.out.println("La palabra " + text + " no tiene letra " + (i + 1));
            }
        }

    }
}
clase para crear el teclado y buscar palabra
Código: [Seleccionar]
package ejercicioscu00662b;

import java.util.Scanner;

public class Teclado {

    private String entradaTeclado;
    Scanner sc = new Scanner(System.in);

    public Teclado() {
        entradaTeclado = "";
    }

    public String buscarPalabra() {
        entradaTeclado = sc.nextLine();
        return entradaTeclado;
    }

}
clase principal main
Código: [Seleccionar]
package ejercicioscu00662b;

public class EjerciciosCu00662B {

    public static void main(String[] args) {
        Teclado teclado = new Teclado();
        VerificarLetra verificar = new VerificarLetra();

        System.out.println("Introduce la primera palabra");
        String palabra_1 = teclado.buscarPalabra();
        System.out.println("Introduce la segunda palabra");
        String palabra_2 = teclado.buscarPalabra();

        verificar.comprobarLetra(palabra_1, palabra_2);

    }

}

Para tener una idea y para modificar tu código
Título: Re:Java Revisión Ejercicio (CU00662B)
Publicado por: DRANXZ88 en 29 de Mayo 2015, 18:08
Esta sugerencia me dieron a mi código para modificar que todavía no hice

Y por último te haría una sugerencia: a la clase Teclado yo la renombraría por un nombre más significativo a lo que hace. La clase -tal como está planteado tu código- es un GestionadorDeEntradasTeclado. Creo que ese nombre es más apropiado para esa clase (o algo similar).
Lo mismo que a su método buscarPalabra() también lo renombraría por algo que sea más alusivo, por ejemplo podría bien llamarse recogerPalalabra(), que verdaderamente es lo que hace.
Título: Re:Java Revisión Ejercicio (CU00662B)
Publicado por: pedro,, en 29 de Mayo 2015, 19:29
gracias por el aporte Ramón, ahora me pondré con el nuevo código.

sobre tu código, cuando lo ejecuto, no hace nada en la parte que debería de decir

La palabra 2 no tiene letra 4 ¿Letra 5 igual en las dos palabras? La palabra 2 no tiene letra 5 ¿Letra 6 igual en las dos palabras? La palabra 2 no tiene letra 6...
Título: Re:Java Revisión Ejercicio (CU00662B)
Publicado por: DRANXZ88 en 29 de Mayo 2015, 20:15
hacele esta modificacion en la clase para verificarLetra
Código: [Seleccionar]
package ejercicioscu00662b;

public class VerificarLetra {

    public void comprobarLetra(String palabra_1, String palabra_2) {
        int limiteSup;
        int limiteInf;
        int text;

        if (palabra_1.length() < palabra_2.length()) {
            limiteInf = palabra_1.length();
            text = 1;
            limiteSup = palabra_2.length();
        } else {
            limiteInf = palabra_2.length();
            text = 2;
            limiteSup = palabra_1.length();
        }
        for (int i = 0; i < limiteSup; i++) {
            if (i < limiteInf) {
                System.out.println("¿Letra " + (i + 1) + " igual en las dos palabras? " + (palabra_1.substring(i, i + 1).equals(palabra_2.substring(i, i + 1))));
            } else {
                System.out.println("La palabra " + text + " no tiene letra " + (i + 1));
            }
        }

    }
Título: Re:Java Revisión Ejercicio (CU00662B)
Publicado por: DRANXZ88 en 29 de Mayo 2015, 20:18
Y el código funciona bien le puse mal nomas la condición y te pase lo que estaba mal cuando imprime dice asi
Título: Re:Java Revisión Ejercicio (CU00662B)
Publicado por: DRANXZ88 en 29 de Mayo 2015, 20:19
Tenes que crear 3 clase aunque podes hacer con 2
Título: Re:Java Revisión Ejercicio (CU00662B)
Publicado por: pedro,, en 31 de Mayo 2015, 02:36
Bueno, siguiendo los consejos que me diste, finalmente hice lo siguiente:
acepto cualquier tipo de consejo y también me gustaría saber, ya que se le da mucha importancia a los nombres que utilizamos, es si los nombres de variables, método, etc. que utilizo son apropiados o si por el contrario pueden llevar al error.

el main

Código: [Seleccionar]
public class IgualdadEntrePalabras{
    public static void main (String [] args) {
        String palabra1 = "";
        String palabra2 = "";
        EntradaDeTeclado getPalabra = new EntradaDeTeclado();
        ComparaPalabras palabras = new ComparaPalabras();
        System.out.println ("Introduce una palabra 1:");
        palabra1 = getPalabra.getPalabra();
        System.out.println ("Introduce una palabra 2:");
        palabra2 = getPalabra.getPalabra();
        palabras.comprobrarIgualdad(palabra1, palabra2);
         
    }
   
}

una clase con getter donde incluyo el Scanner.

Código: [Seleccionar]
import java.util.Scanner;

public class EntradaDeTeclado{
        Scanner entradaEscaner = new Scanner(System.in);
        private String entradaTeclado;
       
        public EntradaDeTeclado(){
            entradaTeclado ="";
        }
       
        public String getPalabra() {
            entradaTeclado = entradaEscaner.nextLine();
            return entradaTeclado;
        }
}

y otra clase mas, donde realizo la comparacion de las palabras.

Código: [Seleccionar]
public class ComparaPalabras {
    public void comprobrarIgualdad(String palabra1, String palabra2) {
        int i = 0;
        if (palabra1.length()>=palabra2.length()) {
            while (i<palabra2.length()) {
                if (palabra1.substring(i, i+1).equals(palabra2.substring(i, i+1))){
                    System.out.println("¿Letra " + (i+1) + " igual en las dos palabras? True");
                } else {
                    System.out.println("¿Letra " + (i+1) + " igual en las dos palabras? False");
                }
                i++;
            }
            while (i<palabra1.length()) {
               System.out.println("La palabra 2 no tiene letra " + (i+1) + ".");
               i++;
            }
        } else if (palabra2.length()>=palabra1.length()) {
            i=0;
            while (i<palabra1.length()) {
                if (palabra1.substring(i, i+1).equals(palabra2.substring(i, i+1))){
                    System.out.println("¿Letra " + (i+1) + " igual en las dos palabras? True");
                } else {
                    System.out.println("¿Letra " + (i+1) + " igual en las dos palabras? False");
                }
                i++;
            }
            while (i<palabra2.length()) {
               System.out.println("La palabra 1 no tiene letra " + (i+1) + ".");
               i++;
            }
        }
    }
}
Título: Re:Java ¿cómo dividir el código en clases? ¿cómo poner nombre de clases? CU00662B
Publicado por: DRANXZ88 en 01 de Junio 2015, 18:49
No va a tener error si no le llama de forma correcta a los métodos constructores y otros
pero por la estandarizacion de java es la forma correcta de programar en java.

En Java existen ciertas reglas de codificación que son comúnmente utilizadas por los programadores.
Conviene conocer y seguir estas reglas.
• Los nombre de las clases deben empezar por mayúscula.
• Los atributos y méodos de las clases deben empezar por minúsculas y si están formadas por varias
palabras, se escriben sin espacios y la primera letra de cada palabra en mayúscula.
• Las instancias de las clases siguen la misma recomendación que los métodos y atributos.
• Las constantes se escriben en mayúsculas.
Título: Re:Java ¿cómo dividir el código en clases? ¿cómo poner nombre de clases? CU00662B
Publicado por: DRANXZ88 en 01 de Junio 2015, 22:58
Funciona bien tu código hace lo que pide el ejercicios es un poco largo el algoritmo pero anda ademas ya esta mas programado orientado a objeto no como el otro que era estructurado
Título: Re:Java ¿cómo dividir el código en clases? ¿cómo poner nombre de clases? CU00662B
Publicado por: pedro,, en 01 de Junio 2015, 23:35
muchas gracias otra vez, lo tendré en cuenta.