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: LuisM en 16 de Noviembre 2017, 13:32
-
Hola a todos !! Dejo a continuación el código del ejercicio propuesto
Desde ya muchas gracias por la atención.
Un saludo,
Luis
EJERCICIO
Define una clase que tenga cuatro atributos de tipo String cada uno de los cuales podrá ser exclusivamente una cadena de 12 ceros o de 12 unos. Es decir, cada atributo puede valer o bien "000000000000" ó bien "111111111111". La clase debe implementar la interface Cloneable y disponer de un método que permita ver el resultado de concatenar sus atributos.
Crea otra clase con el main donde crees un objeto cuyos atributos serán: "000000000000", "000000000000", "000000000000", "000000000000".
A partir de este primer objeto, crea cuatro copias usando el método clone() y modifícalas para llegar a tener cinco objetos (el inicial más los otros cuatro copias del original y luego modificados) cuyo contenido mostrarás por pantalla, debiendo obtener el siguiente resultado:
000000000000000000000000000000000000000000000000
111111111111000000000000000000000000000000000000
000000000000111111111111000000000000000000000000
000000000000000000000000111111111111000000000000
000000000000000000000000000000000000111111111111
Clase CadenaBinaria
public class CadenaBinaria implements Cloneable
{
public String str1, str2, str3, str4;
public CadenaBinaria(String a, String b, String c, String d) {this.str1=a; this.str2=b; this.str3=c; this.str4=d;}
public CadenaBinaria clone() {
CadenaBinaria clon = new CadenaBinaria(this.str1, this.str2, this.str3, this.str4);
return clon;
}
}
Clase principal Programa - main
/* Ejemplo Clase e Interfaz Cloneable aprenderaprogramar.com */
public class Programa {
public static void main(String arg[]) {
CadenaBinaria c = new CadenaBinaria("000000000000","000000000000","000000000000","000000000000");
CadenaBinaria c2 = c.clone();
CadenaBinaria c3 = c.clone();
CadenaBinaria c4 = c.clone();
CadenaBinaria c5 = c.clone();
c2.str1="111111111111";
c3.str2="111111111111";
c4.str3="111111111111";
c5.str4="111111111111";
System.out.println("Cadena binaria original :" + c.str1 + c.str2 + c.str3 + c.str4);
System.out.println("Cadena binaria 2 (clon) :" + c2.str1 + c2.str2 + c2.str3 + c2.str4);
System.out.println("Cadena binaria 3 (clon) :" + c3.str1 + c3.str2 + c3.str3 + c3.str4);
System.out.println("Cadena binaria 4 (clon) :" + c4.str1 + c4.str2 + c4.str3 + c4.str4);
System.out.println("Cadena binaria 5 (clon) :" + c5.str1 + c5.str2 + c5.str3 + c5.str4) ;
}
}
-
Hola Luis M.
Creo que te ha faltado implementar un método en la clase CadenaBinaria para mostrar el resultado de concatenar sus atributos.
Paso a poner aquí mi propuesta de resolución del ejercicio:
Clase Cadenas
public class Cadenas implements Cloneable{
private static final String CEROS="000000000000";
private static final String UNOS="111111111111";
private String cadena1, cadena2, cadena3, cadena4;
public Cadenas(String cadena1, String cadena2, String cadena3, String cadena4){
this.cadena1=CEROS;
this.cadena2=CEROS;
this.cadena3=CEROS;
this.cadena4=CEROS;
}
public String cambiarCadena(String cadena){
if (cadena.equals(CEROS)){return UNOS;}else{return CEROS;}
}
public void cambiarCampo(int numeroDeCampo){
switch(numeroDeCampo){
case 1: this.cadena1=cambiarCadena(cadena1); break;
case 2: this.cadena2=cambiarCadena(cadena2); break;
case 3: this.cadena3=cambiarCadena(cadena3); break;
case 4: this.cadena4=cambiarCadena(cadena4); break;
default: break;
}
}
public void imprimirCadenas(){
System.out.println(cadena1+cadena2+cadena3+cadena4);
}
@Override
public Cadenas clone(){
Cadenas clon = new Cadenas(this.cadena1, this.cadena2, this.cadena3, this.cadena4);
return clon;
}
}
Clase con método main
public class CU00912C {
public static void main(String[] args) {
Cadenas objeto= new Cadenas("000000000000","000000000000","000000000000","000000000000");
Cadenas copia1=objeto.clone();
Cadenas copia2=objeto.clone();
Cadenas copia3=objeto.clone();
Cadenas copia4=objeto.clone();
copia1.cambiarCampo(1);
copia2.cambiarCampo(2);
copia3.cambiarCampo(3);
copia4.cambiarCampo(4);
System.out.print("original: ");
objeto.imprimirCadenas();
System.out.print("copia1: ");
copia1.imprimirCadenas();
System.out.print("copia2: ");
copia2.imprimirCadenas();
System.out.print("copia3: ");
copia3.imprimirCadenas();
System.out.print("copia4: ");
copia4.imprimirCadenas();
}
}
Me gustaría que alguien me comentase cómo hacerlo de forma más eficiente y elegante.
Un saludo.
-
Hola fmartinez25 !!
Muchas gracias por tus comentarios sobre el ejercicio.
"Creo que te ha faltado implementar un método en la clase CadenaBinaria para mostrar el resultado de concatenar sus atributos."
Puede ser... aunque prefiero dejar la clase "Cadenas" (en tu ejemplo) o "Persona" (en el ejemplo) con sus atributos y el uso de la interface Cloneable, sin nada mas. Porque prefiero una clase que construya el objeto y otra que realice las operaciones sobre la misma.
Es lo que creo que definís como "elegante" y en mi humilde opinión es: fácil de entender y mantener !!. Ahora es muy sencillo, pero en casos complejos se nota la diferencia.
Un saludo,
Luis