Foros aprenderaprogramar.com
Aprender a programar => Aprender a programar desde cero => Mensaje iniciado por: Lorenzo31 en 20 de Marzo 2015, 17:38
-
El enunciado del ejemplo pedía;
Valiéndonos de este método, intenta escribir tu propio código para hacer lo siguiente:
a) Reescribir la clase Combinador que usamos anteriormente de forma que el método combinacion devuelva “No aporta cadenas válidas” si se le pasa como parámetro alguna cadena que contenga menos de tres caracteres.
b) Escribir un nuevo método de la clase, al que podemos denominar combinadoSiempre que en caso de que se pasen cadenas con menos de tres caracteres, las combine de todas formas en base a los caracteres disponibles, sea el número que sea.
Donde dice en el ejemplo b las combine de todas formas, he entendido que haga uniones de dos caracteres con todas las opciones que sean posibles, y lo hice adaptado a los caracteres que fueran. Ejemplo si pasas "abc" "def"... crea "ad","ae",af","bd"....
Ejercicio para evaluación
public class CombinaCadenas{
public CombinaCadenas(){
//vacío sin atributos de clase
}
//Método para combinar palabras pasadas por parámetro String que solo tengan tamaño mayor a 3 letras controlando no validas sino.
public String combinadorCadenas(String palabra1, String palabra2, String palabra3){
//Atributos para calcular tamaño de las palabras pasadas
int longitud1 = palabra1.length();
int longitud2 = palabra2.length();
int longitud3 = palabra3.length();
if(longitud1 > 2 && longitud2 > 2 && longitud3 > 2){
return palabra1.substring(0,3) + " " + palabra2.substring(0,3) + "-" + palabra3.substring(0,3);
}else {return "No aporta cadenas válidas";}
}
//Método para combinar palabras sea cual sea el tamaño de estas
public String combinaSiempre(String palabra1, String palabra2, String palabra3){
// Atributos de longitud de las palabras
int longitud1 = palabra1.length();
int longitud2 = palabra2.length();
int longitud3 = palabra3.length();
//Atributo cadena que retornaremos en el metodo
String cadena="";
if (longitud1<3){
cadena=cadena + palabra1.substring(0,longitud1);} else{
cadena=cadena + palabra1.substring(0,3);}
if (longitud2<3){
cadena=cadena + " " + palabra2.substring(0,longitud2);} else{
cadena=cadena + " " + palabra2.substring(0,3);}
if (longitud3<3){
cadena=cadena+ " " + palabra3.substring(0,longitud3);} else{
cadena=cadena+ " " + palabra3.substring(0,3);}
return cadena;
}
//Método para combinar las palabras entre sí en todas las opciones posibles de dos caracteres (me faltaria repetir el bucle empezando por la segunda introducida)
public String combinaLetras(String palabra1, String palabra2){
//String resultante para return
String cadena="";
//Atributos de metodo para calcular tamaño de palabras
int longitud1 = palabra1.length();
int longitud2 = palabra2.length();
if (longitud1<3 && longitud2<3){ //Combinador de palabras con menos de dos letras, aunque sirve para cualquier longitud de tamaño
for(int x=0;x<longitud1;x++){
for(int y=0;y<longitud2;y++){
cadena=cadena + palabra1.substring(x,x+1) + palabra2.substring(y,y+1) + " ";
}
}
for(int x=0;x<longitud1;x++){
for(int y=0;y<longitud2;y++){
cadena=cadena + palabra2.substring(y,y+1) + palabra1.substring(x,x+1) + " ";
}
}
}
return cadena;
}
}
-
Fíjate en el resultado que ofrece el método CombinadoSiempre cuando se le pasan como parámetros dos cadenas vacías. ¿Te parece lógico el resultado?
He hecho un System.out.println(valorTexto1.substring(0,0); y devuelve una cadena vacía, no salta ninguna excepción o error.
Así pues el resultado, un "espacio", es coherente con el código.
Si se quisiera controlar el no pasar cadenas vacías solo habría que poner un if(valorTexto1.length()=0) return "cadena vacia no".
En la clase tenemos definidos dos atributos o campos. ¿Tienen utilidad conocida a la vista del código de la clase? ¿Se usan en los métodos que tenemos definidos?
No, no tienen utilidad ninguna, pues los Strings que se usan dentro del método son los definido en el encabezado del mismo (String valor_texto1) y no los inicializados y declarados en la clase, deberian quitarse.
También he detectado que los métodos, en el texto, están en mayúscula, es un error o tiene que ver algo que sean de la Clase String?
/Método que combina las tres primeras letras de cada cadena
String Combinacion (String valor_texto1, String valor_texto2) {
-
Hola Lorenzo
Has presentado dos mensajes para este ejercicio.
Si lo has hecho porque ya hacía tiempo que habías presentado el primero. No hay problema.
Si entras a leer tu mensaje, verás que hay disponible un botón (https://www.aprenderaprogramar.com/foros/Themes/default/images/icons/modify_inline.gif) 'Modificar'. al pulsarlo, puedes editar tu propio mensaje.
Esta opción está disponible para esto.
O bien, usa el botón responder y añade el segundo mensaje en el mismo hilo.
De momento los he unido en el mismo hilo.
Respecto al código. Nada que objetar al contrario, has hecho más de lo que se pedía con tu método combinaLetras(...). Muy original.
Mezclar las letras de las dos palabras.
Respecto al segundo mensaje.
Si, tal como dices el 'espacio en blanco' es coherente con el código.
Y también como dices los atributos no usados, pueden eliminarse.
También he detectado que los métodos, en el texto, están en mayúscula, es un error o tiene que ver algo que sean de la Clase String?
Si Lorenzo, es un error que ha colado.
En el código de la clase Combinador sobre fondo gris en la entrega CU00650B:
String Combinacion (String valor_texto1, String valor_texto2) {...}
String CombinadoSiempre (String valor_texto1, String valor_texto2) {...}
String CombinadoSiempre = ""; //Cadena vacía, variable local
Formalmente debía ser:
String combinacion (String valor_texto1, String valor_texto2) {...}
String combinadoSiempre (String valor_texto1, String valor_texto2) {...}
String combinadoSiempre = ""; //Cadena vacía, variable local
Cambiando las iniciales a minúscula como proclama la convención de nombres. Y si queremos ser puristas, tal vez declarar los métodos como public.
Gracias por avisar Lorenzo.
Desde aquí hago un llamamiento al departamento de mantenimiento para que tome nota a fin de realizar las rectificaciones oportunas.
Saludos
-
No, no me equivoqué, o al menos no sabía que debia juntarlos, el primer código o email es la práctica, el segundo es el ejercicio evaluable propiamente dicho.
Si he de ponerlos juntos, en el futuro lo tendre en cuenta toni, gracias por los comentarios como siempre.
Sí, lo de public tb me di cuenta, al no declararlos public, por defecto son publicos a otras clases?