Autor
|
Tema: [Problema] Propiedad Derivada que devuelva Mayusculas. (Leído 5,657 veces)
|
LaLakers94
Desconectado
Mensajes: 9
|
Hola, a todos. Soy nuevo y apenas he iniciado mi aventura con Java. Resulta que tengo que crear un programita y me he quedado bastante pillado en la declaración de una propiedad derivada. Esta propiedad tendría que devolver las siglas de un nombre (propiedad no derivada). public class AsignaturaImpl { //Atributos: private String nombre, codigo, departamento, acronimo; private Double creditos; private TipoAsignatura tipo; private Integer curso; //Metodos Get. public String getNombre() { return nombre; } public String getCodigo() { return codigo; } public String getDepartamento() { return departamento; } public Double getCreditos() { return creditos; } public TipoAsignatura getTipo() { return tipo; } public Integer getCurso() { return curso; } //Derivadas public String getAcronimo() { //Derivada de Nombre return acronimo; } }
|
|
|
En línea
|
|
|
|
egyware
|
Sabes que es un constructor? O una función setter (mutador) Bueno tu código compila (solo con verlo compila), lo que te veo con problemas es que no sabes que hacer con el. Bueno averigua que es un contructor o un setter. Saludos! PS: Talvez esto es lo que necesitas http://java.sun.com/j2se/1.4.2/docs/api/java/lang/String.html#toUpperCase()
|
|
« Última modificación: 6 Noviembre 2013, 19:06 pm por egyware »
|
En línea
|
|
|
|
LaLakers94
Desconectado
Mensajes: 9
|
Hola! Métodos constructores y set? Creo que sí. Los constructores para crear los objetos y establecer el estado inicial de estos. Y los métodos set para modificar el estado del objeto, ¿no?
Lo dices porque faltaría en el código? El constructor sí y los métodos setter no debería incluirlos si el enunciado me dice que son propiedades solo consultables, ¿no? Además también debo incluír un método toString pero de momento voy por la declaración de la propiedad derivada Acronimo y es que no tengo ni idea de como hacer que devuelva las siglas del nombre.
Un bucle for que recorra las letras y devuelva las mayúsculas?
|
|
|
En línea
|
|
|
|
|
Mitsu
|
No entiendo qué es lo que deseas hacer en tu algoritmo. Lo que he 'entendido' es que quieres que se devuelvan las siglas en Mayúsculas de un nombre en concreto. Ahora, se me ocurre una forma sencilla. String[] partesNombre = nombre. split(" "); for (String parte : partesNombre ) { // Extrae la primera letra de cada parte del nombre, luego la convierte a String // porque charAt(index) devuelve un char, y lo convierte a mayuscula con 'toUpperCase()' siglas += String. valueOf(parte. charAt(0)). toUpperCase(); } return siglas; }
|
|
|
En línea
|
|
|
|
LaLakers94
Desconectado
Mensajes: 9
|
Creo que ha sido fallo mío que me he explicado como el culo, he pegado ahí todo el código a cuanta de qué. Gracias! No entiendo qué es lo que deseas hacer en tu algoritmo.
Lo que he 'entendido' es que quieres que se devuelvan las siglas en Mayúsculas de un nombre en concreto. Ahora, se me ocurre una forma sencilla.
Eso mismo, acronimo devuelve las siglas en mayúsculas del nombre, muchas gracias! Con esa idea a ver si soy capaz de pasarlo a un for clásico (supongo que una variable (i) que recorra el nombre y lo devuelva en caso de ser Mayusculas, ¿no? Siento haberme explicado tan mal. Lo que me pide el enunciado es crear el tipo Asignatura con esas propiedades (todas consultables) y ya las he declarado en la interface correspondiente. Luego me pide una clase para la interface y a la hora de generar los getters me he quedado estancado en el código de acronimo (propiedad derivada de nombre). ¿Estaría esto bien? public String getAcronimo() { String siglas = ""; Character letra = getNombre().charAt(0); for (Integer i = 0; i<getNombre().length(); i++) { if (letra.isUpperCase(i)){ siglas += letra; } } return siglas;
|
|
« Última modificación: 6 Noviembre 2013, 21:33 pm por LaLakers94 »
|
En línea
|
|
|
|
Mitsu
|
Tu idea de tu método está bien, pero tiene algunas fallas como: letra.isUpperCase(i)
El método isUpperCase si no me equivoco, acepta un parámetro char. Aquí le estás pasando un Integer. Poner esto antes del for es redundante:
Esa instrucción solo la haces una vez en donde obtienes la primera letra de lo que devuelve getNombre(). Luego en el for recorres getNombre(), por lo que la sentencia anterior no tiene caso colocarla. Para hacer más ordenado y simple el algoritmo, podemos hacer lo siguiente: 1) Obtener el nombre de la asignatura 2) Transformarlo a un array de char 3) Recorrer el array en busca de letras Mayúsculas 4) Si es mayúscula, se agrega al String que contendrá las siglas. 5) Devolver las siglas Nota: No utilizo Character por que el método toCharArray() devuelve un array de char y no hay forma de hacer un cast de este array char a un array Character. Otra cosa, para estos procesos sencillos utiliza tipos primitivos que se adapten al algoritmo, como son: short, byte, int, float, double, etc. Integer, Character, etc, son objetos y son usados para cosas un poco más completas. Método: ====== // convierte un String a un array de char char[] asignaturaLetras = getNombre.toCharArray(); for (short i = 0; i < asignaturaLetras.length; i++) { // le pasa una letra (char) y evalua si es mayuscula siglas += asignatura[i]; } } return siglas; }
Saludos.
|
|
« Última modificación: 6 Noviembre 2013, 23:48 pm por M1t$u »
|
En línea
|
|
|
|
LaLakers94
Desconectado
Mensajes: 9
|
Muchísima gracias es perfecto!
|
|
|
En línea
|
|
|
|
juanoide
|
Tu idea de tu método está bien, pero tiene algunas fallas como: letra.isUpperCase(i)
El método isUpperCase si no me equivoco, acepta un parámetro char. Aquí le estás pasando un Integer. Poner esto antes del for es redundante:
Esa instrucción solo la haces una vez en donde obtienes la primera letra de lo que devuelve getNombre(). Luego en el for recorres getNombre(), por lo que la sentencia anterior no tiene caso colocarla. Para hacer más ordenado y simple el algoritmo, podemos hacer lo siguiente: 1) Obtener el nombre de la asignatura 2) Transformarlo a un array de char 3) Recorrer el array en busca de letras Mayúsculas 4) Si es mayúscula, se agrega al String que contendrá las siglas. 5) Devolver las siglas Nota: No utilizo Character por que el método toCharArray() devuelve un array de char y no hay forma de hacer un cast de este array char a un array Character. Otra cosa, para estos procesos sencillos utiliza tipos primitivos que se adapten al algoritmo, como son: short, byte, int, float, double, etc. Integer, Character, etc, son objetos y son usados para cosas un poco más completas. Método: ====== // convierte un String a un array de char char[] asignaturaLetras = getNombre.toCharArray(); for (short i = 0; i < asignaturaLetras.length; i++) { // le pasa una letra (char) y evalua si es mayuscula siglas += asignatura[i]; } } return siglas; }
Saludos. hay una cosa que no pillo de tu codigo no seria asi: // convierte un String a un array de char char[] asignaturaLetras = getNombre.toCharArray(); for (short i = 0; i < asignaturaLetras.length; i++) { // le pasa una letra (char) y evalua si es mayuscula if (Character. isUpperCase(asignaturaLetras [i ])){ siglas += asignaturaLetras[i]; } } return siglas; }
y luego esto de : Character.isUpperCase no entiendo de donde sale Character
|
|
|
En línea
|
|
|
|
Mitsu
|
Hola, Character es una Wrapper, en concreto del primitivo char. Una Wrapper es una clase/objeto de un tipo primitivo (int, char, byte, double, etc). Una Wrapper o clase envoltorio, tiene métodos relacionados a su tipo primitivo que puedes usar, pero que no podrías usar con su primitivo. Por ejemplo, No puedo hacer esto: boolean isUpper = char.isUpperCase('A');
Por que char es un tipo primitivo, NO es una clase. Por otro lado, generalmente no hay problemas en asignarle un int primitivo a un Integer, ni viceversa, ya que la JVM hace un autoboxing o unboxing, respectivamente. El autoboxing consiste en convertir un primitivo a su objeto wrapper, y el unboxing, en convertir un objeto wrapper a su primitivo. Saludos.
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Clase Derivada; Listas de Inicializacion.
Programación C/C++
|
necro1991
|
2
|
4,604
|
11 Octubre 2010, 05:45 am
por necro1991
|
|
|
problema con la propiedad display:inline-block en navegadores moviles
Desarrollo Web
|
Pirat3net
|
1
|
3,544
|
18 Mayo 2013, 21:50 pm
por #!drvy
|
|
|
ayuda con una derivada
Foro Libre
|
flacc
|
2
|
2,443
|
20 Mayo 2013, 08:52 am
por flacc
|
|
|
Duda sobre asignar un acceso de propiedad a la propiedad o utilizar su valor
.NET (C#, VB.NET, ASP)
|
Juanma91
|
7
|
8,272
|
22 Mayo 2013, 11:39 am
por Juanma91
|
|
|
¿Duda sobre la sobreescritura de una función miembro en una clase derivada?
Programación C/C++
|
theluigy13etv
|
3
|
4,352
|
21 Julio 2013, 19:19 pm
por theluigy13etv
|
|