Table of Contents

Dvojrozměrná pole

Dvojrozměrná pole v Javě jsou pole obsahující jednorozměrná pole.

        int [] [] a = { 
                          { 1, 2, 3}, 
                          { 10, 20 } 
                      };

Dynamicky vytvořené pole inicializované nulami

        int [] [] b = new int [2] [3];

Zadáme počet prvků pro nejvyšší dimenzi, místo ostatních necháme prázdné závorky

        int [] [] c = new int [3] [ ];
        c[0] = new int [] { 1, 2, 3 };
        c[1] = new int [] { 10, 20 };
        c[2] = new int [] { 100 };

nebo

        c[0] = new int [] { };         // c[0] má nula prvků
        c[1] = new int [] { 10 };      // c[1] má jeden prvek
        c[2] = new int [] { 100, 200 };

Při větším počtu dimenzí můžeme zadat několik nejvyšších hodnot

Můžeme např. vytvořit pole 3 x 2, obsahující nulové ukazatele na dvojrozměrná pole

        int [][][][] t = new int [3][2][][];
 
        System.out.println (t.length); // vytiskne 3
        System.out.println (t[0].length); // 2
        System.out.println (t[0] == null ? "null" : "array"); // array
        System.out.println (t[0][0] == null ? "null" : "array"); // null

Obrázek

        int [] [] a = { { 1, 2, 3}, { 10, 20 } };
        int [] [] b = new int [2] [3];
        int [] [] c = new int [3] [ ];
        int [] [] d = new int [0] [0];
        int [] [] e = null;
        int [] [] p = a;

Zobrazení dvojrozměrných polí

package experiment;
 
import java.awt.*;
import org.netbeans.lib.awtextra.AbsoluteConstraints;
 
public class Display2D extends javax.swing.JFrame {
 
    public Display2D () 
    {
        initComponents();
        getContentPane().setLayout(new javax.swing.BoxLayout(getContentPane(), javax.swing.BoxLayout.Y_AXIS));
    }
 
    public Display2D (String name, int [ ] [ ] a) 
    {
        this ();
        put (name, a);
    }
 
    private void initComponents() { /* ... */ }
 
    public void put (String name, int [] [] a)
    {
        if (a == null)
        {
           setTitle (name + " == null");
        }
        else
        {
            int n = a.length;
            setTitle (name+ ", " + name + ".length == " + n);
 
            Container target = getContentPane();
            for (int i = 0; i < n; i++)
            {
               DisplayPanel d = new DisplayPanel (name + "[" + i + "]", a[i]);
               target.add (d);
            }
 
            pack ();
        }
    }
 
    private static int x = 10;
    private static int y = 10;
 
    public static void demo (String name, int [] [] a )
    {
        Display2D w = new Display2D (name, a);
        w.setVisible (true);
        w.setLocation (x, y);
        x = x + 40;
        y = y + 40;
    }
 
    public static void main(String args[]) {
        int [] [] a = { { 1, 2, 3}, { 10, 20 } };
        int [] [] b = new int [5] [5];
        int [] [] c = new int [3] [ ];
        int [] [] d = new int [0] [0];
        int [] [] e = null;
 
        demo ("a", a);
        demo ("b", b);
        demo ("c", c);
        demo ("d", d);
        demo ("e", e);
 
        int [] [] t = new int [5] [ ];
        int base = 1;
        for (int i = 0; i < t.length; i++)
        {
            t[i] = new int [t.length - i];
            for (int k = 0; k < t[i].length; k++)
                t[i][k] = (k+1) * base;
            base *=  10;
        }
 
        demo ("t", t);
    }
}

Display2D

            int n = a.length;
 
            String [] title = new String [n];
            String [] [] data = new String [1] [n];

Pole naplníme hodnotami

            for (int i = 0; i < n; i++) 
            {
                title [i] = name + "[" + i + "]" ;
                data [0][i] = "" + a[i]; // convert to string
            }

Vytvoříme model, který bude tabulce typu JTable dodávat data na základě našich dvou polí.
A model předáme tabulce.

            DefaultTableModel model = new DefaultTableModel (data, title);
            jTable1.setModel (model);

Téměř celá třída DisplayPanel

public class DisplayPanel extends javax.swing.JPanel {
 
    public DisplayPanel () 
    {
        initComponents();
    }
 
    public DisplayPanel (String name, int [] a) 
    {
        initComponents();
        put (name, a);
    }
 
    public void put (String name, int a [])
    {
        if (a == null)
        {
           jLabel1.setText ("null");
           jLabel1.setForeground (new Color (255, 0, 0));
           jLabel1.setFont(new java.awt.Font("Dialog", 0, 36)); 
 
           jTextField1.setText ("null");
           jTextField1.setForeground (new Color (255, 0, 0));
           // remove (jTable1);
           // getContentPane().remove (jS)
           jTextField1.setVisible (false);        
           jScrollPane1.setVisible (false);        
        }
        else
        {
            int n = a.length;
 
            jLabel1.setText (name + ".length");
            jTextField1.setText ("" + n);// convert to string
 
            String [] title = new String [n];
            String [] [] data = new String [1] [n];
 
            for (int i = 0; i < n; i++) 
            {
                title [i] = name + "[" + i + "]" ;
                data [0][i] = "" + a[i]; // convert to string
            }
 
            DefaultTableModel model = new DefaultTableModel (data, title);
            jTable1.setModel (model);
 
            TableColumnModel columnModel = jTable1.getColumnModel();
            for (int i = 0; i < n; i++) 
                columnModel.getColumn(i).setMaxWidth (80);
 
            if (n == 0)
               jScrollPane1.setVisible (false);        
        }
    }
}

DisplayPanel

Výstup

        int [] [] a = { { 1, 2, 3}, { 10, 20 } };
        int [] [] b = new int [5] [5];
        int [] [] c = new int [3] [ ];

Trojúhelníkové pole, pole s nula prvky, nulový ukazatel na pole

        int [] [] d = new int [0] [0];
        int [] [] e = null;
 
        int [] [] t = new int [5] [ ];
        int base = 1;
 
        for (int i = 0; i < t.length; i++)
        {
            t[i] = new int [t.length - i];
            for (int k = 0; k < t[i].length; k++)
            {
                t[i][k] = (k+1) * base;
            }
            base *=  10;
        }
 
        demo ("t", t);

gitlab zip