ArrayList

Iniciado por ALBUR, 23 Abril 2012, 18:09 PM

0 Miembros y 1 Visitante están viendo este tema.

ALBUR

Buenas tarde,
Después de darles muchas vueltas al foro me he decidido formar parte de él, a pesar que veo poco principiante por este foro.

En primer lugar dar las gracias a esta páginas, a sus desarrolladores y colaboradores que hacen posible que personas como yo puedan seguir adelante en sus pesquisas.


Como ya he dicho he estado mirando multitud de post y no he encontrado solución a mi duda.

Tengo estas 2 clases:
     La clase Nota viene estructurada así porque es lo que me piden, ya que se trata de que sepamos basicamente para que sirven el "get", "set" "Sacar por pantalla"

     La clase Libreta, es donde configuro mi colección con ArrayList:


Estas son mis preguntas sobre la clase Libreta:
    El método "mostrar_notas" cuando lo invoco me imprime en la consola un código parecido a este (no da error), 3:[Nota@12b6c89, Nota@17b6643, Nota@eaf40c]
¿Alguien puede saber a que se debe?


la idea es que muestre todas las notas añadidas, ie, titulo, contenido y fecha. tanto si las modifico con los métodos de la clase "Nota" y luego los añado con del "método agregar_nota" de la clase "Libreta" o si los añado con el método de "anotar" también de la clase "Libreta".

¿Alguien sabría decirme como sería o que tengo mal?




Un método a implantar en la clase Libreta sería que se pudiese consultar todos los títulos que se han añadido.






//Abre la clase nota.
public class Nota{
    //Campo titulo, introduce el titulo de la nota que deseamos.
    private String titulo;
    //Campo contenido, describe la anotacion que se vaya a realizar.
    private String
contenido;
    // Dia de la nota, es un entero.
    private int dia;
    //Mes de la nota, es un entero.
    private int mes;
    //año de la nota; es un entero
    private int año;
     /**
     * Constructor, donde se inicializan los campos,
     * introduciendo los valores.
     */
    public Nota(String titulo, String contenido, int dia, int mes, int año){
        this.titulo = titulo;
        this.contenido= contenido;
        this.dia = dia;
        this.mes = mes;
        this.año = año;
    }
    /** Nos muestra el valor de la variable titulo.
     * @return a titulo.
     */
    public String get_titulo(){
        return titulo;
    }
    /** Modifica el titulo.
     * @param nuevo_titulo, el nuevo titulo de la nota.
     */
    public void set_titulo(String nuevo_titulo){
        titulo = nuevo_titulo;
    }
     /** Nos muestra el valor de la variable contenido.
     * @return a la variable contenido.
     */
    public String get_contenido(){
        return contenido;
    }
    /** Modifica el contenido.
     * @param nuevo_contenido, el nuevo contenido de la nota.
     */
    public void set_contenido(String nuevo_contenido){
        contenido = nuevo_contenido;
    }
    /** Nos muestra el valor de la variable dia.
     * @return a la variable dia.
     */
    public int get_dia(){
        return dia;       
    }
    /** Modifica el dia.
     * @param nuevo_dia, el nuevo dia de la nota.
     * @return un mensaje de error cuando el valor
     * introducido es menor que 0 o mayor que 31.
     */
    public void set_dia(int nuevo_dia){
        if(nuevo_dia <0){
            System.out.println("ENTRE UN DIA DEL MES MAYOR QUE 0 (1 - 31)");
        }
        if(nuevo_dia >31){
            System.out.println("NO ES UN DIA DEL MES (1 - 31)");
        }
        else{
            dia = nuevo_dia;               
        }
    }
    /** Nos muestra el valor de la variable mes.
     * @return a la variable mes.
     */
    public int get_mes(){       
        return mes;
    }
    /** Modifica el mes.
     * @param nuevo_mes, el nuevo mes de la nota.
     * @return un mensaje de error cuando el valor
     * introducido es menor que 0 o mayor que 12.
     */
    public void set_mes(int nuevo_mes){
        if(nuevo_mes <0){
            System.out.println("ENTRE UN NUMERO DE MES MAYOR QUE 0 (1 - 12)");
        }
        if(nuevo_mes >12){
            System.out.println("NO ES UN NUMERO DE MES VALIDO (1 - 12)");
        }
        else{
            mes = nuevo_mes;
        }
    }
   /** Nos muestra el valor de la variable año.
     * @return a la variable año.
     * @return un mensaje de error cuando el valor
     * introducido en negativo.
     */
    public int get_anio(){       
        return año;
    }
    /** Modifica el año.
     * @param nuevo_anio, el nuevo año de la nota.
     */
    public void set_anio(int nuevo_anio){
        if(nuevo_anio < 0){
            System.out.println("NO EXISTEN LOS AÑOS POSITIVOS (XXXX)");
        }
        else{
            año = nuevo_anio;
        }
    }
    /**En este metodo nos imprime una lista
     * de la nota.
     * @return nos devuelve impreso por pantallas
     * los vales de los campo que hemos introducidos
     * o modificado.
     */
    public void imprimir_nota(){
        System.out.println("          ESTAS SON MIS ANOTACIONES");
        System.out.println("          =========================");
        System.out.println("TITULO DE LA NOTA:   " + titulo);
        System.out.println("DESCRIPCION DE LA NOTA:  " +contenido);
        System.out.println("FECHA:   " + dia + "/" + mes + "/" + año);






import java.util.ArrayList;
* La clase libreta gestiona las notas, las almacena,
* en ella se pueden borrar eligiendo unos criterios,
* mostrar las notas anadidas.
*/
//Abre la clase Libreta
public class Libreta{
    /**
     * Declaro los campos,
     * @param Nota, Un ArrayList del tipo Nota y una
     * @param n, vaiable llamada n.
     * @param notas, coleccon.
     */
    private ArrayList<Nota> notas;
    private Nota n;
    /**
     * Constructor.
     * Inicializo el ArrayList del tipo Nota
     * de la colección notas.
     */
    public Libreta(){
        //Creamos el objeto ArrayList<Nota>
        notas = new ArrayList<Nota>();       
    }   
    /**
     * Usamos el metodo size del ArrayList
     * para que nos muestre el numero de
     * notas que hemos agregado.
     */   
    public int numero_de_notas(){
        return notas.size();
    }
    /**
     *Agregamos una Nota al metodo add del ArrayList.
     */
    public void agregar_nota(Nota n){
        notas.add(n);
    }
   /**
    * Incluyo este metodo para anadir notas diretamente
    * en la clase Libreta.
    * @param titulo, titulo de la nota.
    * @param contenido, descripción de la nota.
    * @param dia, dia de la nota.
    * @param mes, mes de la nota.
    * @param año, año de la nota.
    */
    public void anotar(String titulo, String contenido, int dia, int mes, int año){       
        n = new Nota(titulo, contenido, dia, mes, año);
        notas.add(n);
    }
    /**
     * Este metodo borra una nota seleccionada
     * @param numero_nota, el numero de nota que se quiere
     * borrar, simpre sera menor que las notas agregadas.
     * @return un mesaje si el numero_nota es mayor o
     * menor que las notas agregadas.
     */
    public void borrar_nota(int numero_nota){
        if(numero_nota > notas.size()){
            System.out.println("EL NUMERO ES MAYOR QUE LAS ANOTACIONES EXISTENTES");
        }
        if(numero_nota < 0){
            System.out.println("NO EXISTE EL NUMERO");
        }
        else{
            notas.remove(numero_nota);
        }       
    }
    /**
     * Muestra las notas que se han ido añadiendo.
     */
    public void mostrar_notas(){
        System.out.println(notas.size() + ":" + (notas));
    }
   
}




1mpuls0

Leer las reglas del foro.
http://foro.elhacker.net/java/reglas_del_foro_iexclleed_todos-t163024.0.html

En especifico la clausula "H".

No he revisado tu código pero me parece que estás imprimiendo el arreglo y no el elemento que necesitas.


Saludos.
abc

raul_samp

Madre mía, bueno a parte de lo de la Clausula "H" de las reglas del foro.

Lo que estas haciendo no tiene ni pies ni cabeza

Código (java) [Seleccionar]
System.out.println(notas.size() + ":" + (notas));
es equivalente a :

Código (java) [Seleccionar]
System.out.println(notas.size() + ":" + notas.toString());

donde notas.toString() te da (copio del API):
Returns a string representation of this collection. The string representation consists of a list of the collection's elements in the order they are returned by its iterator, enclosed in square brackets ("[]").

Deberias recorrer el ArrayList y mostrar cada nota por separado.

Para + info, usa el Api de java. O mejor aún.

https://www.google.es/search?aq=0&oq=recorrer+arrayl&sourceid=chrome&ie=UTF-8&q=recorrer+arraylist+java
Yeah Mr. White, yes science!!

ALBUR

Buenas noches,

                  Muchas gracias por lo que hacéis, pero ya os habéis dado cuenta de la idea que tengo de Java, y por si fuera poco los profesores brillan por su ausencia y tardaré en tener un nivel básico.

                  Si no fuese por vosotros, el amigo Google y el boca a boca, que sería de nosotros....
                 
                  Entre lo que vosotros me vayáis diciendo lo que yo pueda sacar vou tirando, ie, no se trata de que os curréis vosotros ese código, lo arregléis y lo publiquéis y yo lo copie, si no hacer comentarios como el que ha hecho RAUL-SAMP y yo le de vueltas hasta sacar algo y lo comente.
                   Llevo mucho tiempo recorriendo foros, páginas, blog, pdfs, de todo y he encontrado varios ejemplos como este pero no los entiendo, y solo tengo que copiarlo y presentarlo. Pero de que me sirve si sigo sabiendo lo mismo, ie, NADA.

Un saludo, y muchas gracias.


ALBUR

Buenas noches:
         Estos son los códigos de los métodos nuevos, funcionan bien.

/**
     *Agregamos una Nota n al metodo add del ArrayList.
     *@param n, objeto Nota que se quiere anadir a la
     *clase Libreta.
     */
    public void agregar_nota(Nota n){
        for(Nota n_indice : notas){
            if(n.get_titulo().equals(n_indice.get_titulo())){
                System.out.println("ESE TITULO YA EXISTE");
                return;
            }
        }
        notas.add(n);
    }
    /**
    * Incluyo este metodo para anadir notas diretamente
    * desde la clase Libreta.
    * @param titulo, titulo de la nota.
    * @param contenido, descripción de la nota.
    * @param dia, dia de la nota.
    * @param mes, mes de la nota.
    * @param año, año de la nota.
    */
    public void anotar(String titulo, String contenido, int dia, int mes, int año){       
        n = new Nota(titulo, contenido, dia, mes, año);
        for(Nota n_indice : notas){
            if(n.get_titulo().equals(n_indice.get_titulo())){
                System.out.println("ESE TITULO YA EXISTE");
                return;
            }
        }
        notas.add(n);
    }
    /**
     * Usamos el metodo size del ArrayList
     * para que nos muestre el numero de
     * notas que hemos agregado.
     * @return int, nos devuelve un numero
     * entero de las notas añadidas.
     */   
    public int numero_de_notas(){
        return notas.size();
    }
     /**
     * Muestra las notas que se han ido añadiendo
     * a la clase libreta.
     */
    public void mostrar_notas(Nota n){
        System.out.println("==================================================");
        System.out.println("ESTAS SON TODAS LAS NOTAS DE " + titulo_libreta);
        System.out.println("==================================================");
        for(Nota nt : notas){
            nt.imprimir_nota();
        }
    }
    /**
     *Muestra totos los titulos que se han
     *anadido a la Libreta.
     *@param Nota, la clase Nota.
     *@param n, el objeto Nota.
     */
     public void mostrar_titulos(Nota n){
        System.out.println("================================================================");
        System.out.println("ESTAS SON TODOS LOS TITULOS DE LAS NOTAS DE " + titulo_libreta);
        System.out.println("================================================================");
        for(Nota nt : notas){
            System.out.println(" : " + nt.get_titulo());           
        }
    }
    /**
     * Este metodo borra una nota seleccionada
     * @param numero_nota, el numero de nota que se quiere
     * borrar, simpre sera menor que las notas agregadas.
     * @return un mesaje si el numero_nota es mayor o
     * menor que las notas agregadas.
     */
    public void borrar_nota(int numero_nota){
        if(numero_nota > notas.size()){
            System.out.println("EL NUMERO ES MAYOR QUE LAS ANOTACIONES EXISTENTES");
        }
        if(numero_nota < 0){
            System.out.println("NO EXISTE EL NUMERO");
        }
        else{
            notas.remove(numero_nota);
        }       
    }


Por otra parte quería hacer una pregunta haber si me podéis ayudar:

Tengo que implementar otra clase. ¿Cual es la estructura del método para relacionar la clase con las otras dos?

raul_samp

Cita de: ALBUR en 27 Abril 2012, 03:54 AM
Por otra parte quería hacer una pregunta haber si me podéis ayudar:

Tengo que implementar otra clase. ¿Cual es la estructura del método para relacionar la clase con las otras dos?

Te refieres a herencia e implementación de interfaces??

si quieres que una clase herede de otra se hace así:

Código (java) [Seleccionar]

class Hijo extends Padre{
}


Java no tiene herencia múltiple como C++.

Para obtener un resultado parecido al de la herencia múltiple en Java se hace mediante la implementación de una o más interfaces:

Código (java) [Seleccionar]

class Hijo implements I1, I2...{
}


Explica un poco más la pregunta para ver a que te refieres.
Yeah Mr. White, yes science!!

ALBUR

Buenas tardes,

Vamos a ver si me explico bien (perdonadme, pero nadie nació aprendido):

Dos de las clases que tengo, son las del inicio del "post":
Nota como clase base,
Libreta donde me piden el ArrayList (con los arreglos que "hemos" realizado me vale").
y una tercera clase a la que llamo Gestor_libreta.

Lo que tiene que hacer esta nueva clase es casi lo mismo que la clase Libreta, poca cosa.

Mi duda es que no se como se relacionan estas clases para que la nueva clase pueda llamar a los metodos y pueda añadir Libreta, Nota. si deberia utilizar un ArrayList.
Por eso, perdona raul_samp por no ser tan explicito y hacerte perder el tiempo.
Si has leido el code del post, no te creas que se mas de esto, los conceptos son aislados y por eso te pedía la sintaxis de esas relaciones.

Esto es lo que tengo en la nueva clase

public class Gestor_libreta{
    private ArrayList<Libreta> libretas;
    private String gestor;
    public Gestor_libreta(String gestor){
        libretas = new ArrayList<Libreta>();
        this.gestor = gestor;
    }
    public void mostrar_nota(Libreta l, Nota n){
        for(Libreta lt : libretas){
            lt.imprimir_notas();
        }       
    }
}


Lo que quiero hacer aqui es mostrar por pantalla todas las  notas de la libreta.

No se que hago mal, por lo que te digo, no entiendo los conceptos.


s00rk

No ocupas hacer un ArrayList de Libretas, puesto que es como una libreta normal, por lo que sencillamente al hacer notas para cada nota utilizas una libreta diferente pues no(al menos que sea para una materia diferente).

Bueno mi punto es que no ocupas hacer nu arraylist de libretas a menos que como dije lo vayas a utilizar como para otra materia, ahora para utilizar los metodos de la clase libreta, basta con hacer un objeto de ella:

Código (java) [Seleccionar]

public class Gestor_libreta{
    private Libreta libretas;
    private String gestor;

    public Gestor_libreta(String gestor)
    {
        libretas = new Libreta();
        this.gestor = gestor;
    }

    public void mostrar_nota()
    {
        libretas.mostrar_notas();
    }
}


Asi sencillamente accedemos al metodo mostrar_notas() de la clase libreta y con eso veremos las notas, y pues tambien puedes acceder a todos aquellos metodos que tengas en la clase libreta(si son public, claro hehe)

raul_samp

Cita de: ALBUR en 27 Abril 2012, 19:31 PM

Lo que tiene que hacer esta nueva clase es casi lo mismo que la clase Libreta, poca cosa.


Vale por la manera en que lo dices me parece que quieres hacer una clase que herede de Libreta, así que voy a explicarte un poco más el concepto.

Cuando decimos que una clase "HIJO" hereda de una clase "PADRE" significa que el HIJO hace todo lo que hacia el PADRE y posiblemente algo más.

De esta forma si haces algo tal que así:

Código (java) [Seleccionar]

class Gestor_libreta extends Libreta{
    // Aqui pondrias las nuevas operaciones que quieras que tenga esta clase

}


Cuando crees un objeto de tipo Gestor_libreta puedes llamar a todos los metodos (operaciones) de Libreta y de Gestor.

Ademas Gestor_libreta conoce internamente todos los métodos y atributos públicos o protegidos de Libreta.

Un poco más de docuemntación con Ejemplos
Yeah Mr. White, yes science!!

ALBUR

Buenas noches Raul.

No me cansaré de decirlo, y es algo que no entiendo, esto de los foros es maravilloso, sobre todo que haya personas dispuesta a ayudarte.

Gracias, y me pongo con ello.