Foros aprenderaprogramar.com

Aprender a programar => Aprender a programar desde cero => Mensaje iniciado por: b_herzeleid en 25 de Octubre 2017, 00:01

Título: Java ejemplo de un mal diseño orientado a objetos fallo de conceptos PO CU00662B
Publicado por: b_herzeleid en 25 de Octubre 2017, 00:01
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!
Título: Re:Aprender a programar desde cero / Equals y bucles en java.Ejemplo CU00662B
Publicado por: Alex Rodríguez en 03 de Enero 2018, 10:44
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