Ejercicio Básico POO. Clase Contador

Ejercicio básico de programación orientada a objetos en Java

Crea una clase llamada Contador que contenga un único atributo entero llamado cont.
La clase tendrá los siguientes constructores:
Constructor por defecto
Constructor con parámetros para inicializar el contador con un valor no negativo. Si el valor inicial que se recibe es negativo el contador tomará el valor cero como valor inicial.
Constructor copia.
Además de los métodos getter y setter, la clase contendrá los métodos:
incrementar: incrementa el contador en una unidad.
decrementar: decrementa el contador en una unidad. El contador nunca podrá tener un valor negativo. Si al decrementar se alcanza un valor negativo el contador toma el valor cero.
Una vez creada la clase, escribe un método main para probar la clase.
Solución:
//Ejercicio Básico Programación Orientada a Objetos Java                                  
//Clase Contador
public class Contador {

    private int cont;

    //constructor por defecto
    public Contador() {
    }

    //constructor con parámetros
    public Contador(int cont) {
        if (cont < 0) {
            this.cont = 0;
        } else {
            this.cont = cont;
        }
    }

    //constructor copia
    public Contador(final Contador c) {                                                                           
        cont = c.cont;
    }

    //getter
    public int getCont() {
        return cont;
    }

    //setter
    public void setCont(int cont) {
        if (cont < 0) {
            this.cont = 0;
        } else {
            this.cont = cont;
        }
    }

    //método incrementar contador
    public void incrementar() {
        cont++;
    }

    //método decrementar contador
    public void decrementar() {
        cont--;
        if (cont < 0) {
            cont = 0;
        }
    }
}//Fin de la clase Contador

Un método main para probar la clase puede ser este:
 public static void main(String[] args) {
       
        Scanner sc = new Scanner(System.in);
       
        //Utilizar el constructor por defecto
        Contador contador1 = new Contador();
      
        int n;
        System.out.println("Introduce valor para inicializar el contador: ");                                     
        n = sc.nextInt();
       
        //asignar un valor al contador
        contador1.setCont(n);
        //incrementar el contador
        contador1.incrementar();
        //mostrar el valor actual
        System.out.println(contador1.getCont());
       
        contador1.incrementar();
        contador1.incrementar();
       
        //mostrar el valor actual
        System.out.println(contador1.getCont());
       
        //restar 1 al valor del contador
        contador1.decrementar();
       
        //mostrar el valor actual
        System.out.println(contador1.getCont());

        //crear un nuevo objeto Contador con valor inicial 10
        Contador contador2 = new Contador(10);
       
        //incrementar y decrementar el contador2 y mostrar su valor                                               
        contador2.incrementar();
        System.out.println(contador2.getCont());
        contador2.decrementar();
        System.out.println(contador2.getCont());

        //crear un objeto Contador utilizando el constructor copia
        //se crea el objeto contador3 como copia de contador2
        Contador contador3 = new Contador(contador2);

        //mostrar el valor de contador3
        System.out.println(contador3.getCont());

}//Ejercicio básico POO Java. Clase principal

32 comentarios:

  1. Hola, actualmente me encuentro estudiando los ejercicios de java que propones, pero no entiendo por qué pides una copia del constructor y en el programa no muestras como funciona, la verdad no soy experta en ello pero me gustaría que me explicaras como funciona esta copia.
    Gracias por la atención prestada quedo atenta a cualquier indicación.

    ResponderEliminar
    Respuestas
    1. x2 no entiendo el funcionamiento del constrcutor copia

      Eliminar
    2. imaginate que para instanciar un nuevo contador puedes hacer esto: Contador cont1 = new Contador(3);

      Así inicias tu contador con 3.
      Ahora imagínate que por alguna razón quieres hacer otro contador que inicie con 3.
      Ahí es donde entra el constructor copia.

      Contador con2 = new Contador(con1)

      Aquí el parámetro del constructor es otro contador que ya hemos creado.
      Podrá parecer que es lo mismo pero no, en uno el parámetro es un entero y en el otro el parámetro es un objeto

      Eliminar
  2. Hola me retracto del comentario anterior, si usas el constructor copia.

    ResponderEliminar
  3. MUCHAS GRACIAAAAS!!!!! Están geniales tus ejemplos y me están ayudando muchísimo.

    ResponderEliminar
  4. buenas.amigo para que es el constructor copia y el por defecto?

    ResponderEliminar
    Respuestas
    1. El consstructor por defecto, como su nombre lo dice es el que llama por defecto un objeto cuando es creado sin argumentos.

      Eliminar
  5. java te crea un constructor por defecto sin parametros de todos modos si tu creas un constructor por defecto el primer objeto que crees en el main llamara al constructor por defecto el constructor por defecto java nos lo da si no hay otro constructor en este caso lo hemos creado porque va a haber otro constructor y se desea usar

    ResponderEliminar
  6. y el constructor copia,copia la informacion del constructor por defecto y en este caso este usa un atributo de tipo contador donde almacena esa informacion y se le pone la palabra reservada final para que el atributo contador no se pueda modificar esa es la funciona de final que un atributo no se pueda modificar.

    ResponderEliminar
  7. COMO PUEDO RESOLVER ESTE EJERCICIO
    Una empresa del sector tecnológico desea tener un sistema de información para administrar toda la información de su personal. Se conoce la siguiente información de cada empleado: número de identificación, nombres, apellidos, fecha de ingreso, sueldo básico mensual, porcentaje promedio de cumplimiento en los proyectos que participa y número de proyectos en los que participa. Desde el punto de vista de la contratación, se tienen empleados con contrato a término fijo, con contrato indefinido y por prestación de servicios. Para determinar el sueldo mensual de cada empleado, se tiene en cuenta:

    Si el contrato es a término indefinido y el porcentaje de cumplimiento en proyectos es superior al 90%, se incrementará el 10% al sueldo básico mensual.
    Si el contrato es a término fijo y el porcentaje de cumplimiento en proyectos es superior al 90%, se incrementará el 8 % al sueldo básico mensual.
    Si el contrato es por prestación de servicios y le porcentaje de cumplimiento en proyectos es superior al 90%, se incrementará el 2% por cada proyecto en el que participe.

    ResponderEliminar
  8. Objetivo de la tarea

    Comprender la forma de derivar una subclase.

    Para esta actividad se tendrá que elaborar un programa en java utilizando herencia y diagrama UML; el ejercicio indica lo siguiente:

    Descripción de la Actividad:

    Implemente una superclase Factura. A continuación, construya las clases FacturaCredito y FacturaContado heredadas de la clase Factura. Una Factura tiene un número consecutivo y una fecha de creación. Una FacturaCredito tiene un plazo máximo para realizar su pago, y una FacturaContado tiene dos medios de pago: efectivo o tarjeta débito.

    Construya las clases correspondientes, sus constructores y los métodos toString para cada una de las clases. Finalmente construya una nueva clase que permita hacer uso de las clases creadas inicialmente.

    Ademas construya el respectivo diagrama UML cumpliendo los siguientes objetivos

    Modelar el caso de uso

    Modelar el diagrama de clase
    me ayudan con este ejercicio porfa

    ResponderEliminar
  9. Que pasaría si en un problema pidieran hacer un formulario y contabilizar cuantos hombres, mujeres, sean mujeres trabajadores, hombres trabajadoras, etc. Debería de hacer el mismo procedimiento? por q si fuese así debería de crear las variables tanto como en la clase y en el main, aparte de eso debería usar los métodos de acceso por cada variable. en ese caso q haría?

    ResponderEliminar
  10. public class OcupacionDeMemoria {
    static Runtime rm = Runtime.getRuntime();
    private static void Memoria(){
    int dataSize = 1024 * 1024;
    System.out.println("Memoria máxima: "+rm.maxMemory()/ dataSize+ " MB");
    System.out.println("Memoria total: "+rm.totalMemory()/ dataSize+ " MB");
    System.out.println("Memoria libre: "+rm.freeMemory()/ dataSize+ " MB");
    }

    static int[] n = new int[100];

    private static void conElementos(){
    for(int i =0;i l = new ArrayList();

    private static void variosElemento(){
    for(int i=0;i<20 ;i++){
    l.add(i);
    }
    Memoria();
    }

    private static void muchosElementos(){
    for(int i=0;i<10000000 ;i++){
    l.add(i);
    }
    Memoria();

    }

    public static void main(String[] args) {
    System.out.println("Memoria Previa: ");
    System.out.println("-----------------------------");
    Memoria();
    System.out.println("-----------------------------");
    System.out.println("Memoria con array de 100 elementos creado: ");
    System.out.println("-----------------------------");
    conElementos();
    System.out.println("-----------------------------");
    System.out.println("Memoria con ArrayList y varios elementos: ");
    System.out.println("-----------------------------");
    variosElemento();
    System.out.println("-----------------------------");
    System.out.println("Memoria con ArrayList y gran cantidad de elementos: ");
    System.out.println("-----------------------------");
    muchosElementos();
    System.out.println("-----------------------------");

    }
    }

    ResponderEliminar
  11. public class Datos implements Serializable {

    private String Nombre;
    private String Apellido;

    private static final long serialVersionUID = 65765L;

    public Datos() {
    }

    public Datos(String Nombre, String Apellido) {
    this.Nombre = Nombre;
    this.Apellido = Apellido;
    }

    public String getNombre() {
    return Nombre;
    }

    public void setNombre(String Nombre) {
    this.Nombre = Nombre;
    }

    public String getApellido() {
    return Apellido;
    }

    public void setApellido(String Apellido) {
    this.Apellido = Apellido;
    }

    public static long getSerialVersionUID() {
    return serialVersionUID;
    }

    @Override
    public String toString() {
    return "Datos{" + "Nombre=" + Nombre + ", Apellido=" + Apellido + ", UID" + serialVersionUID + '}';
    }

    public static void main(String[] args) throws IOException, ClassNotFoundException {

    //objetos
    Datos datos = new Datos();

    Datos datos2 = datos;

    //modificar ambas variables
    datos.setNombre("daniel");
    datos.setApellido("lauroba");

    //verficacion
    System.out.println(datos);
    System.out.println(datos2);

    System.out.println("---------------------\n");

    //Clonacion
    ByteArrayOutputStream byt = new ByteArrayOutputStream();
    ObjectOutputStream out = null;
    byte[] Datos = null;

    try {
    out = new ObjectOutputStream(byt);
    out.writeObject(datos);
    out.flush();
    Datos = byt.toByteArray();

    } finally {
    try {
    byt.close();
    } catch (Exception e) {
    }

    }

    Datos datos3 = null;
    ByteArrayInputStream bis = new ByteArrayInputStream(Datos);

    ObjectInputStream in = null;
    try {
    in = new ObjectInputStream(bis);
    datos3 = (Datos) in.readObject();

    } finally {
    try {
    if (in != null) {
    in.close();
    }
    } catch (Exception e) {
    }
    }

    datos3.setNombre("frffff");
    datos3.setApellido("ffffttttf");
    System.out.println(datos);
    System.out.println(datos3);

    }

    }

    ResponderEliminar
  12. public class Contador {

    ArrayList elementos = new ArrayList();
    ArrayList contador = new ArrayList<>();


    /**
    * Añadimos el elemento incremetando el contador
    * @param value
    */
    public void Count(T value) {

    if (!elementos.contains(value)) {

    elementos.add(value);
    contador.add(1);

    }else{
    int index = elementos.indexOf(value);
    contador.set(index, contador.get(index)+1);
    }

    }
    /**
    * Eliminamos el elemento decrementando el contador
    * @param value
    */
    public void discount(T value) {

    if (elementos.contains(value)) {


    int index = elementos.indexOf(value);
    if(contador.get(index)==1){
    elementos.remove(index);
    contador.remove(index);
    }else{
    contador.set(index, contador.get(index)-1);
    }

    }
    }

    public void delete(T value) {
    for (int i = 0; i < elementos.size(); i++) {
    if(elementos.get(i).equals(value)){
    elementos.remove(i);
    }
    }
    for (int i = 0; i < elementos.size(); i++) {
    System.out.println(elementos.get(i));
    }


    }

    @Override
    public String toString() {
    for(int i=0;i contador1 = new Contador();

    System.out.println("Metodo count: ");

    contador1.Count(1);
    contador1.Count(2);
    contador1.Count(1);
    contador1.Count(3);
    contador1.Count(1);
    contador1.Count(2);
    contador1.Count(1);
    contador1.Count(3);
    System.out.println(contador1.toString());


    System.out.println("-------------------\n");
    System.out.println("Metodo discount: \n");
    contador1.discount(2);
    contador1.discount(1);
    System.out.println(contador1.toString());

    System.out.println("-------------------\n");
    System.out.println("Metodo delete: \n");
    contador1.delete(3);


    }

    }

    ResponderEliminar
  13. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  14. public class NodeList {
    //El propio elemento

    private T elem;
    //La referencia al siguiente elemento
    private NodeList next = null;
    //La referencia al anterior elemento
    private NodeList prev = null;

    public NodeList(T elemento) {
    this.elem = elemento;
    }


    //Getters

    public T getElem() {
    return elem;
    }

    public NodeList getNext() {
    return next;
    }

    public NodeList getPrev() {
    return prev;
    }

    //setter

    public void setElem(T elem) {
    this.elem = elem;
    }

    public void setNext(NodeList next) {
    this.next = next;
    }

    public void setPrev(NodeList prev) {
    this.prev = prev;
    }

    }

    ResponderEliminar
  15. public class Lista {

    //El primer elemento de la lista
    private NodeList first = null;
    //El tamaño de la lista
    private int length = 0;


    public int size() {
    return this.length;
    }


    public void add(int elem) {
    NodeList act = new NodeList(elem); //Creamos el nuevo elemento
    if (this.first != null) //Si la lista no está vacía
    {
    NodeList last = this.first;
    //Busca el que no tenga siguiente, es decir, el último.
    while (last.getNext() != null) {
    last = last.getNext();
    }
    last.setNext(act);
    act.setPrev(last);
    } else {
    this.first = act;
    }

    this.length++;
    }


    private NodeList search(int index) {
    NodeList act = this.first;
    for (int i = 0; i < index; i++) {
    act = act.getNext();
    }
    return act;
    }


    public int get(int index) throws IndexOutOfBoundsException {
    //Si el índice está dentro de los parámetros.
    if (index >= 0 && index < this.length) {
    NodeList elem = (NodeList) search(index);
    return (int) elem.getElem();
    }
    throw new IndexOutOfBoundsException();
    //return -1; //O cualquier convención, o incluso lanzamos una excepción.
    }


    public void set(int index, int elem) throws IndexOutOfBoundsException {
    //Si el índice está dentro de los parámetros.
    if (index >= 0 && index < this.length) {
    NodeList act = (NodeList) search(index);
    act.setElem(elem);
    }else{
    throw new IndexOutOfBoundsException();
    }
    //return -1; //O cualquier convención, o incluso lanzamos una excepción.
    }


    public void delete(int index) {
    if (index >= 0 && index < this.length && this.first != null) {
    if (this.length == 1) {
    this.first = null;
    } else {
    if (index == 0) {
    this.first = this.first.getNext();
    this.first.setPrev(null);
    } else {
    NodeList act = (NodeList) search(index);
    act.getPrev().setNext(act.getNext());
    if (act.getNext() != null) {
    act.getNext().setPrev(act.getPrev());
    }
    }

    }
    this.length--;
    }
    }


    public String toString() {
    if (this.length > 0) {
    NodeList act = this.first;
    String list = "[" + act.getElem();
    for (int i = 1; i < this.length; i++) {
    act = act.getNext();
    list += "," + act.getElem();
    }
    return list + "]";
    } else {
    return "Lista vacía";
    }
    }

    public static void main(String[] args) {

    System.out.println("creamos array de lista");
    Lista lista = new Lista<>();

    System.out.println("añadimos elemencontos con (lista.add) ");
    lista.add(1);
    lista.add(2);
    lista.add(3);
    System.out.println(lista.toString());
    System.out.println("--------------------------------");
    System.out.println("buscamos la posicion del elemento: " + lista.get(2));
    System.out.println("cambiamos el elemento de la poscion dada:");
    lista.set(1, 7);

    System.out.println("buscamos la posicion del elemento: " + lista.get(1));
    System.out.println("--------------------------------");
    System.out.println("borramos elemento");
    lista.delete(2);
    System.out.println(lista.toString());
    System.out.println("--------------------------------");

    System.out.println("Mostramos el tamaño: "+lista.size());

    }
    }

    ResponderEliminar
  16. public class ListaArbolBinario {

    private NodeTree raiz = null;

    public void add(int _dato) {
    NodeTree nuevo = new NodeTree(_dato);

    if (raiz == null) {
    raiz = nuevo;
    } else {
    NodeTree padre = raiz;
    NodeTree act = raiz;

    while (act != null) {
    padre = act;
    if (_dato < act.getDato()) {
    act = act.getIzquierda();
    } else {
    act = act.getDerecha();
    }

    if (_dato < padre.getDato()) {
    padre.setIzquierda(nuevo);
    } else {
    padre.setDerecha(nuevo);
    }
    }
    }
    }

    public boolean existe(int _dato) {

    NodeTree padre = raiz;
    while (padre != null) {

    if (_dato < padre.getDato()) {
    padre = padre.getIzquierda();
    } else {
    if (_dato > padre.getDato()) {
    padre = padre.getDerecha();
    } else {
    return true;
    }

    }

    }
    return false;
    }

    public boolean delete(int _dato) {

    NodeTree padre = raiz;
    NodeTree act = raiz;

    //encontrar el hijo derecho o izquierdo para eliminarlo
    while (padre.getDato() != _dato) {
    act = padre;

    }
    return false;

    }

    public int Deep(int _dato) {

    NodeTree padre = raiz;
    int produndidad =0;
    while(padre !=null){
    if (_dato == padre.getDato()) {
    return produndidad++;
    }else{
    if (_dato < padre.getDato()) {
    padre = padre.getIzquierda();
    }else{
    padre = padre.getDerecha();
    }
    }
    }
    return -1;

    }

    public void Preorden(NodeTree n) {
    if (n != null) {
    System.out.println(n.getDato());
    Preorden(n.getIzquierda());
    Preorden(n.getDerecha());
    }
    }


    public void inoder(NodeTree n) {
    if (n != null) {
    inoder(n.getIzquierda());
    System.out.println(n.getDato());
    inoder(n.getDerecha());
    }
    }

    public void posorden(NodeTree n) {
    if (n != null) {
    inoder(n.getIzquierda());
    inoder(n.getDerecha());
    System.out.println(n.getDato());
    }
    }


    public int min() {

    NodeTree padre = raiz;

    NodeTree last = null;

    while (padre != null) {
    last = padre;
    padre = padre.getIzquierda();
    }
    System.out.println(last.getDato());
    return last.getDato();
    }


    public int max() {
    NodeTree padre = raiz;

    NodeTree last = null;

    while (padre != null) {
    last = padre;
    padre = padre.getDerecha();
    }
    System.out.println(last.getDato());
    return last.getDato();
    }


    public int altura( NodeTree n) {

    if(n == null){
    return 0 ;
    }else{
    return 1+ Math.max(altura(n.getIzquierda()),altura(n.getDerecha()));
    }
    }

    public static void main(String[] args) {
    ListaArbolBinario arbol = new ListaArbolBinario();

    arbol.add(3);
    arbol.add(1);
    arbol.add(6);
    arbol.add(4);
    arbol.add(7);
    arbol.add(2);
    arbol.add(8);

    System.out.println("Existe: "+ arbol.existe(8));
    System.out.println(arbol.Deep(8));


    arbol.Preorden(arbol.raiz);


    arbol.inoder(arbol.raiz);


    arbol.posorden(arbol.raiz);

    arbol.min();
    arbol.max();
    System.out.println(arbol.altura(arbol.raiz));
    }
    }

    ResponderEliminar
  17. public class NodeTree {

    private NodeTree derecha;
    private NodeTree izquierda;
    private int dato;

    public NodeTree(int dato) {
    this.dato = dato;
    }

    public NodeTree(NodeTree derecha, NodeTree izquierda, int dato) {
    this.derecha = derecha;
    this.izquierda = izquierda;
    this.dato = dato;
    }




    public NodeTree getDerecha() {
    return derecha;
    }

    public void setDerecha(NodeTree derecha) {
    this.derecha = derecha;
    }

    public NodeTree getIzquierda() {
    return izquierda;
    }

    public void setIzquierda(NodeTree izquierda) {
    this.izquierda = izquierda;
    }

    public int getDato() {
    return dato;
    }

    public void setDato(int dato) {
    this.dato = dato;
    }


    }

    ResponderEliminar
  18. public class Lista {

    private NodeList inicio = null;

    private int length = 0;

    //muestra el tamaño
    public int size() {
    return this.length;
    }

    //mostrar si esta vacio o no
    public boolean esVacio() {
    return length == 0;
    }

    //añadir nuevo elemento al principio de la lista
    public void add(int elem) {


    if (inicio == null) {
    inicio = new NodeList(elem);

    } else {
    NodeList act = new NodeList(elem);
    NodeList pos = inicio;
    for (int i = 1; i < length; i++) {
    pos = pos.getSiguiente();

    }

    pos.setSiguiente(act);
    act.setAnterior(pos);
    length++;
    }
    }

    //Obtener el elemento de una posición dada
    public int get(int index) {
    NodeList pos = inicio;

    if (index >= 0 && index < this.length) {
    for (int i = 1; i < length; i++) {
    pos = pos.getSiguiente();
    }

    return pos.getElem();

    }
    return -1;
    }

    //modificar elemento de una posicion dada
    public int set(int index) {
    NodeList pos = inicio;

    if (index >= 0 && index < this.length) {
    for (int i = 1; i < length; i++) {
    pos = pos.getSiguiente();
    }

    pos.setElem(index);

    }
    return 0;

    }

    //borrar
    public void delete(int index) {

    NodeList pos = inicio;

    if (index >= 0 && index < this.length) {
    for (int i = 1; i < length; i++) {
    pos = pos.getSiguiente();
    }

    }
    if (length == 1) {
    inicio = null;

    } else if (index == 0) {
    pos.getSiguiente().setAnterior(null);
    inicio = pos.getSiguiente();

    } else if (index == length - 1) {
    pos.getAnterior().setSiguiente(null);

    } else {
    pos.getAnterior().setSiguiente(pos.getSiguiente());
    pos.getSiguiente().setAnterior(pos.getAnterior());
    length--;
    }

    }

    //mostrar lista
    public void show() {
    NodeList pos = inicio;

    //recorrer lista
    if (!esVacio()) {
    for (int i = 0; i < this.length; i++) {
    System.out.println("i: " + i +" " +pos.getElem());
    pos = pos.getSiguiente();
    }
    }

    }

    public static void main(String[] args) {
    Lista lista = new Lista();


    System.out.println("añadir elementos:");
    lista.add(1);
    lista.add(2);
    lista.add(3);
    lista.add(4);
    lista.add(5);
    lista.add(6);

    System.out.println("Mostramos lista de elementos");
    lista.show();

    System.out.println("obtener elemento de una posicion dada: "+lista.get(3));
    System.out.println("modificar elemento de una posicion dada: "+lista.set(4));

    lista.delete(4);









    }

    }

    ResponderEliminar
  19. public class NodeList {

    //atributos
    private int elem;
    private NodeList siguiente = null;
    private NodeList anterior = null;


    //constructor

    public NodeList(int elemento){
    this.elem=elemento;
    }


    public NodeList(int elemento, NodeList siguiente, NodeList anterior) {
    this.elem = elemento;
    this.siguiente = siguiente;
    this.anterior = anterior;
    }





    //get y set

    public int getElem() {
    return elem;
    }

    public void setElem(int elem) {
    this.elem = elem;
    }

    public NodeList getSiguiente() {
    return siguiente;
    }

    public void setSiguiente(NodeList siguiente) {
    this.siguiente = siguiente;
    }

    public NodeList getAnterior() {
    return anterior;
    }

    public void setAnterior(NodeList anterior) {
    this.anterior = anterior;
    }



    }

    ResponderEliminar
  20. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  21. public class Memoria{
    static Runtime rm = Runtime.getRuntime();
    private static void Memoria(){
    int dataSize = 1024 * 1024;
    System.out.println("Memoria máxima: "+rm.maxMemory()/ dataSize+ " MB");
    System.out.println("Memoria total: "+rm.totalMemory()/ dataSize+ " MB");
    System.out.println("Memoria libre: "+rm.freeMemory()/ dataSize+ " MB");
    }

    static int[] n = new int[100];

    private static void conElementos(){
    for(int i =0;i l = new ArrayList();

    private static void variosElemento(){
    for(int i=0;i<20 ;i++){
    l.add(i);
    }
    Memoria();
    }

    private static void muchosElementos(){
    for(int i=0;i<10000000 ;i++){
    l.add(i);
    }
    Memoria();

    }

    public static void main(String[] args) {
    System.out.println("Memoria Previa: ");
    System.out.println("-----------------------------");
    Memoria();
    System.out.println("-----------------------------");
    System.out.println("Memoria con array de 100 elementos creado: ");
    System.out.println("-----------------------------");
    conElementos();
    System.out.println("-----------------------------");
    System.out.println("Memoria con ArrayList y varios elementos: ");
    System.out.println("-----------------------------");
    variosElemento();
    System.out.println("-----------------------------");
    System.out.println("Memoria con ArrayList y gran cantidad de elementos: ");
    System.out.println("-----------------------------");
    muchosElementos();
    System.out.println("-----------------------------");

    }
    }

    ResponderEliminar
  22. public class Lista {
    //El primer elemento de la lista

    private NodeList first = null;
    //El tamaño de la lista
    private int length = 0;

    /**
    * Devuelve el tamaño.
    */
    public int size() {
    return this.length;
    }

    /**
    * Añade un elemento al final de lista
    *
    * @param elem: El valor del elemento a añadir.
    */
    public void add(T elem) {
    NodeList act = new NodeList(elem); //Creamos el nuevo elemento
    if (this.first != null) //Si la lista no está vacía
    {
    NodeList last = this.first;
    //Busca el que no tenga siguiente, es decir, el último.
    while (last.getNext() != null) {
    last = last.getNext();
    }
    last.setNext(act);
    act.setPrev(last);
    } else {
    this.first = act;
    }

    this.length++;
    }

    /**
    * Busca un elemento dado un índice y lo devuelve.
    *
    * @param index: El índice del elemento a buscar empezando en 0
    */
    private NodeList search(int index) {
    NodeList act = this.first;
    for (int i = 0; i < index; i++) {
    act = act.getNext();
    }
    return act;
    }

    /**
    * Devuelve el valor del elemento en una posición dada.
    *
    * @param index: La posición del elemento a buscar empezando en 0.
    */
    public T get(int index) throws IndexOutOfBoundsException {
    //Si el índice está dentro de los parámetros.
    if (index >= 0 && index < this.length) {
    NodeList elem = search(index);
    return (T) elem.getElem();
    }
    throw new IndexOutOfBoundsException();
    //return -1; //O cualquier convención, o incluso lanzamos una excepción.
    }

    /**
    * Cambia el valor del elemento en una posición dada.
    *
    * @param index: La posición del elemento a cambiar empezando en 0.
    * @param elem: El valor a establecer
    */
    public void set(int index, T elem) throws IndexOutOfBoundsException {
    //Si el índice está dentro de los parámetros.
    if (index >= 0 && index < this.length) {
    NodeList act = search(index);
    act.setElem(elem);
    } else {
    throw new IndexOutOfBoundsException();
    //return -1; //O cualquier convención, o incluso lanzamos una excepción.
    }
    }

    /**
    * Elimina el elemento en una posición dada.
    *
    * @param index: La posición del elemento a borrar empezando en 0.
    */
    public void delete(int index) {
    if (index >= 0 && index < this.length && this.first != null) {
    if (this.length == 1) {
    this.first = null;
    } else {
    if (index == 0) {
    this.first = this.first.getNext();
    this.first.setPrev(null);
    } else {
    NodeList act = search(index);
    act.getPrev().setNext(act.getNext());
    if (act.getNext() != null) {
    act.getNext().setPrev(act.getPrev());
    }
    }

    }
    this.length--;
    }
    }

    /**
    * Muestra por pantalla el valor de todos los elementos de la lista.
    */
    public String toString() {
    if (this.length > 0) {
    NodeList act = this.first;
    String list = "[" + act.getElem();
    for (int i = 1; i < this.length; i++) {
    act = act.getNext();
    list += "," + act.getElem();
    }
    return list + "]";
    } else {
    return "Lista vacía";
    }
    }
    }

    ResponderEliminar
  23. public class Ejecutable {
    public static void main(String[] args) {
    Lista prueba = new Lista();
    //size
    System.out.println("Tamaño sin nada: ");
    System.out.println(prueba.size());

    //add
    System.out.println("Elementos añadidos");
    prueba.add("Elemento1");
    prueba.add("Elemento2");
    prueba.add("Elemento3");
    prueba.add("Elemento4");

    //size
    System.out.println("Muestra el tamaño: ");
    System.out.println(prueba.size());

    //get
    System.out.println("Obtenemos el tercer elemento: ");
    System.out.println(prueba.get(3));

    //toString
    System.out.println("Recorremos la lista de inicio a fin: ");
    System.out.println(prueba.toString());

    //set
    System.out.println("Modificamos el valor del 4º elemento: ");
    prueba.set(3, "ElementoModificado");

    //toString
    System.out.println("Volvemos a Mostrar los elementos: ");
    System.out.println(prueba.toString());

    //delete
    System.out.println("Eliminamos el 2 elemento");
    prueba.delete(1);

    //toString
    System.out.println("Listamos todo de nuevo");
    System.out.println(prueba.toString());
    }
    }

    ResponderEliminar
  24. ¿Es necesario hacer un constructor por defecto?

    ResponderEliminar