elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Rompecabezas de Bitcoin, Medio millón USD en premios


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Java
| | | |-+  [Problema] Propiedad Derivada que devuelva Mayusculas.
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [Problema] Propiedad Derivada que devuelva Mayusculas.  (Leído 4,989 veces)
LaLakers94

Desconectado Desconectado

Mensajes: 9


Ver Perfil
[Problema] Propiedad Derivada que devuelva Mayusculas.
« en: 6 Noviembre 2013, 17:04 pm »

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

Código
  1. public class AsignaturaImpl {
  2.  
  3. //Atributos:
  4. private String nombre, codigo, departamento, acronimo;
  5. private Double creditos;
  6. private TipoAsignatura tipo;
  7. private Integer curso;
  8.  
  9. //Metodos Get.
  10. public String getNombre() {
  11. return nombre;
  12. }
  13. public String getCodigo() {
  14. return codigo;
  15. }
  16. public String getDepartamento() {
  17. return departamento;
  18. }
  19.  
  20. public Double getCreditos() {
  21. return creditos;
  22. }
  23. public TipoAsignatura getTipo() {
  24. return tipo;
  25. }
  26. public Integer getCurso() {
  27. return curso;
  28. }
  29. //Derivadas
  30. public String getAcronimo() { //Derivada de Nombre
  31.  
  32. return acronimo;
  33. }
  34.  
  35.  
  36.  
  37. }



En línea

egyware


Desconectado Desconectado

Mensajes: 526



Ver Perfil WWW
Re: [Problema] Propiedad Derivada que devuelva Mayusculas.
« Respuesta #1 en: 6 Noviembre 2013, 18:14 pm »

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 Desconectado

Mensajes: 9


Ver Perfil
Re: [Problema] Propiedad Derivada que devuelva Mayusculas.
« Respuesta #2 en: 6 Noviembre 2013, 19:20 pm »

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

egyware


Desconectado Desconectado

Mensajes: 526



Ver Perfil WWW
Re: [Problema] Propiedad Derivada que devuelva Mayusculas.
« Respuesta #3 en: 6 Noviembre 2013, 19:29 pm »

Bueno me confundí con el código que pusiste, pero creo que lo que necesitas es esto.

http://docs.oracle.com/javase/1.4.2/docs/api/java/lang/String.html#toUpperCase()
En línea

Mitsu

Desconectado Desconectado

Mensajes: 259



Ver Perfil WWW
Re: [Problema] Propiedad Derivada que devuelva Mayusculas.
« Respuesta #4 en: 6 Noviembre 2013, 20:34 pm »

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.

Código
  1. private String doSiglasNombre(final String nombre) {
  2.      String siglas = "";
  3.      String[] partesNombre = nombre.split(" ");
  4.  
  5.      for (String parte : partesNombre) {
  6.        // Extrae la primera letra de cada parte del nombre, luego la convierte a String
  7.        // porque charAt(index) devuelve un char, y lo convierte a mayuscula con 'toUpperCase()'
  8.        siglas += String.valueOf(parte.charAt(0)).toUpperCase();
  9.      }
  10.      return siglas;
  11.    }
  12.  
En línea

LaLakers94

Desconectado Desconectado

Mensajes: 9


Ver Perfil
Re: [Problema] Propiedad Derivada que devuelva Mayusculas.
« Respuesta #5 en: 6 Noviembre 2013, 21:09 pm »

Bueno me confundí con el código que pusiste, pero creo que lo que necesitas es esto.

http://docs.oracle.com/javase/1.4.2/docs/api/java/lang/String.html#toUpperCase()

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?

Código
  1. public String getAcronimo() {
  2. String siglas = "";
  3. Character letra = getNombre().charAt(0);
  4. for (Integer i = 0; i<getNombre().length(); i++) {
  5. if (letra.isUpperCase(i)){
  6. siglas += letra;
  7. }
  8.  
  9. }
  10. return siglas;
« Última modificación: 6 Noviembre 2013, 21:33 pm por LaLakers94 » En línea

Mitsu

Desconectado Desconectado

Mensajes: 259



Ver Perfil WWW
Re: [Problema] Propiedad Derivada que devuelva Mayusculas.
« Respuesta #6 en: 6 Noviembre 2013, 23:00 pm »

Tu idea de tu método está bien, pero tiene algunas fallas como:

Código
  1. letra.isUpperCase(i)
  2.  

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:

Código
  1. Character letra = getNombre().charAt(0);
  2.  

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:
======

Código
  1. public String getAcronimo() {
  2. String siglas = "";
  3.                // convierte un String a un array de char
  4.                char[] asignaturaLetras = getNombre.toCharArray();
  5.  
  6. for (short i = 0; i < asignaturaLetras.length; i++) {
  7.                        // le pasa una letra (char) y evalua si es mayuscula
  8. if (Character.isUpperCase(asignatura[i])){
  9. siglas += asignatura[i];
  10. }
  11.  
  12. }
  13. return siglas;
  14. }
  15.  


Saludos.
« Última modificación: 6 Noviembre 2013, 23:48 pm por M1t$u » En línea

LaLakers94

Desconectado Desconectado

Mensajes: 9


Ver Perfil
Re: [Problema] Propiedad Derivada que devuelva Mayusculas.
« Respuesta #7 en: 7 Noviembre 2013, 14:47 pm »

Muchísima gracias es perfecto!
En línea

juanoide

Desconectado Desconectado

Mensajes: 33



Ver Perfil WWW
Re: [Problema] Propiedad Derivada que devuelva Mayusculas.
« Respuesta #8 en: 12 Noviembre 2013, 14:05 pm »

Tu idea de tu método está bien, pero tiene algunas fallas como:

Código
  1. letra.isUpperCase(i)
  2.  

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:

Código
  1. Character letra = getNombre().charAt(0);
  2.  

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:
======

Código
  1. public String getAcronimo() {
  2. String siglas = "";
  3.                // convierte un String a un array de char
  4.                char[] asignaturaLetras = getNombre.toCharArray();
  5.  
  6. for (short i = 0; i < asignaturaLetras.length; i++) {
  7.                        // le pasa una letra (char) y evalua si es mayuscula
  8. if (Character.isUpperCase(asignatura[i])){
  9. siglas += asignatura[i];
  10. }
  11.  
  12. }
  13. return siglas;
  14. }
  15.  


Saludos.

hay una cosa que no pillo de tu codigo no seria asi:

Código
  1. public String getAcronimo() {
  2. String siglas = "";
  3.                // convierte un String a un array de char
  4.                char[] asignaturaLetras = getNombre.toCharArray();
  5.  
  6. for (short i = 0; i < asignaturaLetras.length; i++) {
  7.                        // le pasa una letra (char) y evalua si es mayuscula
  8. if (Character.isUpperCase(asignaturaLetras[i])){
  9. siglas += asignaturaLetras[i];
  10. }
  11.  
  12. }
  13. return siglas;
  14. }
  15.  

y luego esto de :

Character.isUpperCase

no entiendo de donde sale Character
En línea

Mitsu

Desconectado Desconectado

Mensajes: 259



Ver Perfil WWW
Re: [Problema] Propiedad Derivada que devuelva Mayusculas.
« Respuesta #9 en: 12 Noviembre 2013, 17:38 pm »

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:

Código
  1. boolean isUpper = char.isUpperCase('A');
  2.  

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

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines