Listado completo de tutoriales
25 - Matrices irregulares |
Java nos permite crear matrices irregulares. Se dice que una matriz es irregular si la cantidad de elementos de cada fila varía. Luego podemos imaginar una matriz irregular:

Como podemos ver la fila cero tiene reservado dos espacios, la fila uno reserva cuatro espacios y la última fila reserva espacio para tres componentes.
Para crear la matriz irregular del gráfico:
La declaración es la misma que para matrices regulares:
int [][] mat;
Primero creamos la cantidad de filas dejando vacío el espacio que indica la cantidad de columnas:
mat=new int[3][];
Luego debemos ir creando cada fila de la matriz indicando la cantidad de elementos de la respectiva fila:
mat[0]=new int[2]; mat[1]=new int[4]; mat[2]=new int[3];
Luego la forma para acceder a sus componentes es similar a las matrices regulares, siempre teniendo en cuenta y validando que exista dicha componente:
mat[0][0]=120;
Dará un error si queremos cargar la tercer componente de la fila cero (esto debido a que no existe):
mat[0][2]=230;
Luego si queremos saber la cantidad de filas que tiene la matriz:
Sytem.out.println(mat.length);
Si queremos saber la cantidad de elementos de una determinada fila:
Sytem.out.println("Cantidad de elementos de la fila 0:"+mat[0].length);
Sytem.out.println("Cantidad de elementos de la fila 1:"+mat[1].length);
Sytem.out.println("Cantidad de elementos de la fila 2:"+mat[2].length);
Confeccionaremos un programa que permita crear una matriz irregular y luego imprimir la matriz en forma completa.
import java.util.Scanner;
public class MatrizIrregular1 {
private Scanner teclado;
private int[][] mat;
public void cargar() {
teclado=new Scanner(System.in);
System.out.print("Cuantas fila tiene la matriz:");
int filas=teclado.nextInt();
mat=new int[filas][];
for(int f=0;f<mat.length;f++) {
System.out.print("Cuantas elementos tiene la fila " + f + ":");
int elementos=teclado.nextInt();
mat[f]=new int[elementos];
for(int c=0;c<mat[f].length;c++) {
System.out.print("Ingrese componente:");
mat[f][c]=teclado.nextInt();
}
}
}
public void imprimir() {
for(int f=0;f<mat.length;f++) {
for(int c=0;c<mat[f].length;c++) {
System.out.print(mat[f][c]+" ");
}
System.out.println();
}
}
public static void main(String[] ar) {
MatrizIrregular1 ma=new MatrizIrregular1();
ma.cargar();
ma.imprimir();
}
}
Primero creamos la cantidad de filas que tendrá la matriz (en los corchetes para las columnas no disponemos valor):
System.out.print("Cuantas fila tiene la matriz:");
int filas=teclado.nextInt();
mat=new int[filas][];
Dentro del primer for pedimos que ingrese la cantidad de elementos que tendrá cada fila y utilizamos el operador new nuevamente, pero en este caso se están creando cada fila de la matriz (Java trata a cada fila como un vector):
for(int f=0;f<mat.length;f++) {
System.out.print("Cuantas elementos tiene la fila " + f + ":");
int elementos=teclado.nextInt();
mat[f]=new int[elementos];
Dentro del for interno hacemos la carga de las componentes propiamente dicho de la matriz (podemos ir cargando cada fila a medida que las vamos creando):
for(int c=0;c<mat[f].length;c++) {
System.out.print("Ingrese componente:");
mat[f][c]=teclado.nextInt();
}
Luego imprimimos la matriz en forma completa teniendo cuidado las condiciones que disponemos en cada for.
El primer for se repite tantas veces como filas tiene la matriz: f<mat.length y
el for interno se repite tantas veces como elementos tiene la fila que estamos procesando c<mat [f].length:
for(int f=0;f<mat.length;f++) {
for(int c=0;c<mat[f].length;c++) {
System.out.print(mat[f][c]+" ");
}
System.out.println();
}
import java.util.Scanner;
public class MatrizIrregular2 {
private Scanner teclado;
private int[][] mat;
public void cargar() {
teclado=new Scanner(System.in);
mat=new int[5][];
for(int f=0;f<mat.length;f++) {
mat[f]=new int[f+1];
for(int c=0;c<mat[f].length;c++) {
System.out.print("Ingrese componente:");
mat[f][c]=teclado.nextInt();
}
}
}
public void imprimir() {
for(int f=0;f<mat.length;f++) {
for(int c=0;c<mat[f].length;c++) {
System.out.print(mat[f][c]+" ");
}
System.out.println();
}
}
public static void main(String[] ar) {
MatrizIrregular2 ma=new MatrizIrregular2();
ma.cargar();
ma.imprimir();
}
}
import java.util.Scanner;
public class MatrizIrregular3 {
private Scanner teclado;
private String[] nombres;
private int[][] dias;
public void cargar() {
teclado=new Scanner(System.in);
nombres=new String[3];
dias=new int[3][];
for(int f=0;f<nombres.length;f++) {
System.out.print("Ingrese el nombre del empleado:");
nombres[f]=teclado.next();
System.out.print("Cuantas días faltó el empleado:");
int faltas=teclado.nextInt();
dias[f]=new int[faltas];
for(int c=0;c<dias[f].length;c++) {
System.out.print("Ingrese nro de día:");
dias[f][c]=teclado.nextInt();
}
}
}
public void inasistencias() {
for(int f=0;f<nombres.length;f++) {
System.out.println(nombres[f] + " faltó " + dias[f].length + " días");
}
}
public void empleadoMenosFaltas() {
int faltas=dias[0].length;
String nom=nombres[0];
for(int f=1;f<dias.length;f++) {
if (dias[f].length<faltas) {
faltas=dias[f].length;
nom=nombres[f];
}
}
System.out.println("El empleado que faltó menos es "+nom+" con "+faltas+" faltas.");
}
public static void main(String[] ar) {
MatrizIrregular3 ma=new MatrizIrregular3();
ma.cargar();
ma.inasistencias();
ma.empleadoMenosFaltas();
}
}