Código Java – Redimensionar Matrices sin Borrar Registros con Redim Preserve


Este es el Ejemplo #21 del Topic: Programación Gráfica en Java.

Este será un post corto. Muchas veces mientras programamos hemos tenido la necesidad de re-dimensionar las matrices que ya hemos declarado sin perder los datos que ya tengamos registrados en ella, pues esto es tarea sencilla en otros lenguajes de programación pero no quiere decir que en java no lo sea. El siguiente procedimiento se encargará de ello. Lo que hará es recibir una matriz y un entero indicando el nuevo tamaño de la matriz y lo redimencionará automáticamente:

...
    public void redimPreserve(Object obj[],int i)
    {
        if(i>obj.length)
        {
            Object[] tempVar = new Object[i];
            if (obj != null)
                    System.arraycopy(obj, 0, tempVar, 0, Math.min(obj.length, tempVar.length));
            obj = tempVar;
        }
    }
...

Código de Ejemplo:

package beastieux.gui;

import javax.swing.JOptionPane;

/**
 *
 * @author beastieux
 */
public class Ejm21_RedimPreserve {

    public void redimPreserve(Object obj[],int i)
    {
        if(i>obj.length)
        {
            Object[] tempVar = new Object[i];
            if (obj != null)
                    System.arraycopy(obj, 0, tempVar, 0, Math.min(obj.length, tempVar.length));
            obj = tempVar;
        }
    }

    public static void main(String args[])
    {
        Ejm21_RedimPreserve obj = new Ejm21_RedimPreserve();

        String []a_num;

        a_num = new String[] {"1","2","3"};
        for(int i=0;i<a_num.length;i++)
            JOptionPane.showMessageDialog(null, a_num[i]);

        obj.redimPreserve(a_num,5);

        JOptionPane.showMessageDialog(null, "Después del redim preserve");

        a_num = new String[] {"1","2","3","4","5"};

        for(int i=0;i<a_num.length;i++)
            JOptionPane.showMessageDialog(null, a_num[i]);
    }
}
Anuncio publicitario

4 comentarios sobre “Código Java – Redimensionar Matrices sin Borrar Registros con Redim Preserve

  1. De nada sirve el metodo que propones, porque luego vuelves a recrear el arreglo, en otras palabras, la funcion solo sirve para comer memoria y tiempo de ejecucion, porque no hace nada.

  2. Tu función de redimPresev está incorrecta y no redimensiona nada porque los parámetros de tipo array se pasan por valor y no por referencia.
    Debería retornar el array redimensionado para que funcione

    Lo que vos estás haciendo en la rutina es llamar a redimPreserve y luego, recrear la matriz con los nuevos valores, cosa que no tiene nada que ver con el redim.

Deja tu comentario

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Salir /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Salir /  Cambiar )

Conectando a %s