lunes, 17 de octubre de 2016

Java básico #16

Matrices en Java

Un array en Java, puede tener más de una dimensión. El caso más general son los arrays bidimensionales también llamados matrices o tablas.
Una matriz necesita dos índices para acceder a sus elementos. Graficamente, podemos representar una matriz como una tabla de n filas y m columnas cuyos elementos son del mimo tipo.

Pero, en realidad, una matriz en Java, es un array de arrays.

¿Cómo se declaran las matrices?

Declarar una matriz en Java, es tan sencillo, como crear un array unidimensional, de dos indices, es decir:

int [][] ventas = new int[4][6];

El 4 indica las filas y el 6 las columnas.

En Java, se pueden crear arrays irregulares en los que el número de elementos de cada fila es variable, solo es obligado indicar las filas.

Ejemplo crear una matriz de 3 filas:

int [][]m = int[3][];

A cada fila, le podemos asignar n columnas:
m[0] = new int[3]--> La fila 0, tendra 3 columnas
m[1] = new int[5]--> La fila 1, tendrá 5 columnas
m[2] = new int[2]--> La fila 2, tendrá 2 columnas

Si queremos inicializar matrices hacemos lo siguiente:
int [][] numeros = {{6, 7, 5}, {3, 8, 4}, {1, 0, 2},};
Esto creará una matriz de 3 filas y 3 columnas, gráficamente es algo así:

6 7 5
3 8 4
1 0 2

Pero, ¿Cómo recorro una matriz?
Anidando dos bucles for, En general se anidan tantos bucles for, por cada dimension del array.

import java.util.*;
 
public class Bidimensional2 {
 
    public static void main(String[] args) {
 
        final int FILAS = 5, COLUMNAS = 4;
        Scanner sc = new Scanner(System.in);
        int i, j, mayor, menor;
        int filaMayor, filaMenor, colMayor, colMenor;
        int[][] A = new int[FILAS][COLUMNAS];
 
        System.out.println("Lectura de elementos de la matriz: ");
        for (i = 0; i < FILAS; i++) {
            for (j = 0; j < COLUMNAS; j++) {
                System.out.print("A[" + i + "][" + j + "]= ");
                A[i][j] = sc.nextInt();
            }
        }
        System.out.println("valores introducidos:");
        for (i = 0; i < A.length; i++) { 
            for (j = 0; j < A[i].length; j++) {
                System.out.print(A[i][j] + " ");
            }
            System.out.println();
        }
        mayor = menor = A[0][0];//se toma el primero como mayor y menor
        filaMayor = filaMenor = colMayor = colMenor = 0;
 
        for (i = 0; i < A.length; i++) {  //
            for (j = 0; j < A[i].length; j++) {
                if (A[i][j] > mayor) {
                    mayor = A[i][j];
                    filaMayor = i;
                    colMayor = j;
                } else if (A[i][j] < menor) {
                    menor = A[i][j];
                    filaMenor = i;
                    colMenor = j;
                }
            }           
        }
        System.out.print("Elemento mayor: " + mayor);
        System.out.println(" Fila: "+ filaMayor + " Columna: " + colMayor);
        System.out.print("Elemento menor: " + menor);
        System.out.println(" Fila: "+ filaMenor + " Columna: " + colMenor);
    }
}

Para recorrer arrays irregulares, usaremos siempre el atributo length

for(i = 0; i < a.length; i++){  //número de filas
    for(int j = 0; j < a[i].length; j++){  //número de columnas
        System.out.println(a[i][j] + " ");
    }
    System.out.println();
}


Solución al ejercicio anterior:

package ArraysCaracteres;
 
import java.util.Scanner;
 
public class Main {
 
 public static void main(String[] args) {
  char [] array;
  Scanner sc = new Scanner(System.in);
  String frase;
 
  System.out.println("Introduzca la frase");
  frase = sc.nextLine();
 
  array = frase.toCharArray();
 
  for(int i = 0; i <= array.length-1; i++){
   if(array[i] == 'a'){
    System.out.println("El valor de array["+i+"] es a");
   }else{
    continue;
   }
  }
  sc.close();
 }
 
}

Hay que tener en cuenta, que un array puede tener infinitas dimensiones

Ejercicio:

Queremos almacenar en una matriz, el número de alumnos con el que cuenta una academia, ordenados en función del nivel y del idioma que se estudia. Tendremos 3 filas que representarán al nivel básico, medio y avanzado y 4 columnas en las que figurarán los idiomas(0 = Inglés, 1 = Francés, 2 = Alemán y 3 = Ruso). Se pide realizar la declaración de la matriz y asignarle unos valores a cada elemento.

No hay comentarios:

Publicar un comentario