Autor Tema: Java ejemplo de un mal diseño orientado a objetos fallo de conceptos PO CU00662B  (Leído 2506 veces)

b_herzeleid

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 4
    • Ver Perfil
Qué tal,  Mando mi solucion para el ejercicio CU00662B del curso de programación java pdf

Saludos

Clase Main
Código: [Seleccionar]
public class ComCadena {

public static void main(String[] args) {
System.out.println ("*****Comparacion cadenas*******");
EntradaTeclado cad1 = new EntradaTeclado();
}

}

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

public class EntradaTeclado {
private String cad1;
private String cad2;
public EntradaTeclado() {
cad1=cad2="";
System.out.println("Ingrese cadena 1:");
cad1 = pedirEntrada();
System.out.println("Ingrese cadena 2:");
cad2 = pedirEntrada();
comparaCad(cad1, cad2);
}
public String pedirEntrada () {
String cadena;
Scanner entradaEscaner = new Scanner (System.in);
return cadena = entradaEscaner.nextLine ();
}

public void comparaCad(String str,String str2) {

for (int i = 0, j = 0; i < str.length()||j<str2.length(); i++,j++) {
if(i<str.length()&&j<str2.length()) {
System.out.println("¿Letra " + (i+1) + " igual en las dos palabras? "+str.substring(i, i+1).equals(str2.substring(j, j+1)));
}else {
if(i>=str.length()&&j<str2.length()){
System.out.println("¿Letra " + (i+1) + " igual en las dos palabras? "+"La palabra 1 no tiene " + (i+1) + " letras");
}else {
if(i<str.length()&&j>=str2.length()){
System.out.println("¿Letra " + (i+1) + " igual en las dos palabras? "+"La palabra 2 no tiene " + (j+1) + " letras");
}
}
}
}
}
}

Agracecere cualquier comentario.
Saludos!
« Última modificación: 03 de Enero 2018, 10:45 por Alex Rodríguez »

Alex Rodríguez

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2050
    • Ver Perfil
Hola b_herzeleid, aunque tu código funciona podríamos decir que no está bien diseñado de acuerdo con los principios de la programación orientada a objetos.

Si has seguido el curso desde el principio deberías tener en cuenta diferentes cuestiones:

a) Una clase representa algo, justamente lo que indique su nombre. No es correcto que una clase se llame EntradaDeTeclado y que incluya un método como public void comparaCad(String str,String str2) ya que comparar cadenas no es algo que le corresponda a una entrada de teclado. Esto es algo que debería hacerse en una clase que tuviera por nombre ComparadorDeCadenas o algo similar.

b) En la clase EntradaDeTeclado incluyes código como

Código: [Seleccionar]
public EntradaTeclado() {
cad1=cad2="";
System.out.println("Ingrese cadena 1:");
cad1 = pedirEntrada();
System.out.println("Ingrese cadena 2:");
cad2 = pedirEntrada();
comparaCad(cad1, cad2);
}

Los constructores están destinados principalmente a inicializar los atributos de los objetos. No es correcto incluir mensajes con System.out.println ni ejecutar acciones propias del desarrollo de un programa. El desarrollo de un programa, quien "reparte el juego", debe ser la clase con el método main.

c) Tu clase con el main no está bien planteada por lo que he comentado anteriormente.

La recomendación es seguir el curso completo, ir haciendo ejercicio a ejercicio y comprobando las soluciones en los foros, donde hay numerosos ejemplos de ejercicios resueltos. Por ejemplo para este ejercicio puedes consultar una solución correcta en https://www.aprenderaprogramar.com/foros/index.php?topic=2089.0

Saludos

 

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