AFF Education Construa seu Futuro

Aula 53 - Array Bidimensional (Matriz)

Array Bidimensional - Matriz

Um array bidimensional (ou matriz) é uma estrutura de dados que organiza elementos em linhas e colunas, como uma tabela. É essencialmente um "vetor de vetores".

Características principais:

Declaração e Inicialização de Matrizes

Existem várias formas de declarar e inicializar matrizes:

Forma 1: Declaração com tamanho

public class DeclaracaoMatriz1 {
    public static void main(String[] args) {
        // Criando uma matriz 3x4 (3 linhas, 4 colunas)
        int[][] matriz = new int[3][4];
        
        // Todos os elementos são inicializados com 0
        System.out.println("Matriz 3x4 com valores padrão:");
        for (int i = 0; i < matriz.length; i++) {
            for (int j = 0; j < matriz[i].length; j++) {
                System.out.print(matriz[i][j] + " ");
            }
            System.out.println();
        }
        
        System.out.println("\nNúmero de linhas: " + matriz.length);
        System.out.println("Número de colunas: " + matriz[0].length);
    }
}

Matriz 3x4 com valores padrão:

0 0 0 0

0 0 0 0

0 0 0 0

Número de linhas: 3

Número de colunas: 4

Forma 2: Inicialização com valores

public class DeclaracaoMatriz2 {
    public static void main(String[] args) {
        // Declarando e inicializando com valores
        int[][] matriz = {
            {1, 2, 3},
            {4, 5, 6},
            {7, 8, 9}
        };
        
        // Exibindo a matriz
        System.out.println("Matriz 3x3:");
        for (int i = 0; i < matriz.length; i++) {
            for (int j = 0; j < matriz[i].length; j++) {
                System.out.print(matriz[i][j] + " ");
            }
            System.out.println();
        }
    }
}

Matriz 3x3:

1 2 3

4 5 6

7 8 9

Entrada de Valores em um Vetor com Scanner

Podemos usar a classe Scanner para ler valores do usuário e preencher um vetor:

import java.util.Scanner;

public class EntradaVetor {
    public static void main(String[] args) {
        Scanner entrada = new Scanner(System.in);
        
        // Criando vetor de 5 posições
        int[] numeros = new int[5];
        
        // Lendo valores do usuário
        System.out.println("Digite 5 números:");
        for (int i = 0; i < numeros.length; i++) {
            System.out.print("Número " + (i + 1) + ": ");
            numeros[i] = entrada.nextInt();
        }
        
        // Exibindo os valores digitados
        System.out.println("\nValores digitados:");
        for (int i = 0; i < numeros.length; i++) {
            System.out.println("Posição " + i + ": " + numeros[i]);
        }
        
        entrada.close();
    }
}

Digite 5 números:

Número 1: 10

Número 2: 20

Número 3: 30

Número 4: 40

Número 5: 50

Valores digitados:

Posição 0: 10

Posição 1: 20

Posição 2: 30

Posição 3: 40

Posição 4: 50

Entrada de Valores em uma Matriz com Scanner

Da mesma forma, podemos usar Scanner para preencher matrizes:

import java.util.Scanner;

public class EntradaMatriz {
    public static void main(String[] args) {
        Scanner entrada = new Scanner(System.in);
        
        // Criando matriz 2x3
        int[][] matriz = new int[2][3];
        
        // Lendo valores do usuário
        System.out.println("Preencha a matriz 2x3:");
        for (int i = 0; i < matriz.length; i++) {
            for (int j = 0; j < matriz[i].length; j++) {
                System.out.print("Elemento [" + i + "][" + j + "]: ");
                matriz[i][j] = entrada.nextInt();
            }
        }
        
        // Exibindo a matriz
        System.out.println("\nMatriz digitada:");
        for (int i = 0; i < matriz.length; i++) {
            for (int j = 0; j < matriz[i].length; j++) {
                System.out.print(matriz[i][j] + " ");
            }
            System.out.println();
        }
        
        entrada.close();
    }
}

Preencha a matriz 2x3:

Elemento [0][0]: 5

Elemento [0][1]: 10

Elemento [0][2]: 15

Elemento [1][0]: 20

Elemento [1][1]: 25

Elemento [1][2]: 30

Matriz digitada:

5 10 15

20 25 30

Exemplo Prático: Matriz de Notas

Vamos criar um programa que armazena notas de alunos em diferentes provas:

import java.util.Scanner;

public class MatrizNotas {
    public static void main(String[] args) {
        Scanner entrada = new Scanner(System.in);
        
        // Matriz: 3 alunos x 4 provas
        double[][] notas = new double[3][4];
        String[] alunos = {"Ana", "Bruno", "Carlos"};
        
        // Entrada de notas
        for (int i = 0; i < notas.length; i++) {
            System.out.println("\nNotas de " + alunos[i] + ":");
            for (int j = 0; j < notas[i].length; j++) {
                System.out.print("Prova " + (j + 1) + ": ");
                notas[i][j] = entrada.nextDouble();
            }
        }
        
        // Calculando e exibindo médias
        System.out.println("\n=== BOLETIM ===");
        for (int i = 0; i < notas.length; i++) {
            double soma = 0;
            System.out.print(alunos[i] + ": ");
            
            for (int j = 0; j < notas[i].length; j++) {
                soma += notas[i][j];
                System.out.print(notas[i][j] + " ");
            }
            
            double media = soma / notas[i].length;
            System.out.printf("| Média: %.2f\n", media);
        }
        
        entrada.close();
    }
}

Notas de Ana:

Prova 1: 8.5

Prova 2: 9.0

Prova 3: 7.5

Prova 4: 8.0

Notas de Bruno:

Prova 1: 7.0

Prova 2: 6.5

Prova 3: 8.0

Prova 4: 7.5

Notas de Carlos:

Prova 1: 9.5

Prova 2: 10.0

Prova 3: 9.0

Prova 4: 9.5

=== BOLETIM ===

Ana: 8.5 9.0 7.5 8.0 | Média: 8.25

Bruno: 7.0 6.5 8.0 7.5 | Média: 7.25

Carlos: 9.5 10.0 9.0 9.5 | Média: 9.50

Matriz de Strings

Matrizes podem armazenar qualquer tipo de dado, incluindo strings:

public class MatrizStrings {
    public static void main(String[] args) {
        // Matriz com dados de produtos
        String[][] produtos = {
            {"Notebook", "Dell", "R$ 3500"},
            {"Mouse", "Logitech", "R$ 150"},
            {"Teclado", "Razer", "R$ 450"},
            {"Monitor", "LG", "R$ 1200"}
        };
        
        // Exibindo a tabela de produtos
        System.out.println("=== CATÁLOGO DE PRODUTOS ===");
        System.out.println("PRODUTO\t\tMARCA\t\tPREÇO");
        System.out.println("-----------------------------------------------");
        
        for (int i = 0; i < produtos.length; i++) {
            System.out.println(produtos[i][0] + "\t\t" + 
                             produtos[i][1] + "\t\t" + 
                             produtos[i][2]);
        }
        
        // Acessando dados específicos
        System.out.println("\nProduto na posição [2][0]: " + produtos[2][0]);
        System.out.println("Marca na posição [1][1]: " + produtos[1][1]);
    }
}

=== CATÁLOGO DE PRODUTOS ===

PRODUTO MARCA PREÇO

-----------------------------------------------

Notebook Dell R$ 3500

Mouse Logitech R$ 150

Teclado Razer R$ 450

Monitor LG R$ 1200

Produto na posição [2][0]: Teclado

Marca na posição [1][1]: Logitech

Operações com Matrizes

Exemplo de operações matemáticas com matrizes:

public class OperacoesMatriz {
    public static void main(String[] args) {
        int[][] matriz = {
            {5, 10, 15},
            {20, 25, 30},
            {35, 40, 45}
        };
        
        // Soma de todos os elementos
        int somaTotal = 0;
        for (int i = 0; i < matriz.length; i++) {
            for (int j = 0; j < matriz[i].length; j++) {
                somaTotal += matriz[i][j];
            }
        }
        System.out.println("Soma total: " + somaTotal);
        
        // Soma de cada linha
        System.out.println("\nSoma por linha:");
        for (int i = 0; i < matriz.length; i++) {
            int somaLinha = 0;
            for (int j = 0; j < matriz[i].length; j++) {
                somaLinha += matriz[i][j];
            }
            System.out.println("Linha " + i + ": " + somaLinha);
        }
        
        // Soma de cada coluna
        System.out.println("\nSoma por coluna:");
        for (int j = 0; j < matriz[0].length; j++) {
            int somaColuna = 0;
            for (int i = 0; i < matriz.length; i++) {
                somaColuna += matriz[i][j];
            }
            System.out.println("Coluna " + j + ": " + somaColuna);
        }
    }
}

Soma total: 225

Soma por linha:

Linha 0: 30

Linha 1: 75

Linha 2: 120

Soma por coluna:

Coluna 0: 60

Coluna 1: 75

Coluna 2: 90

Exercícios

Teste seus conhecimentos sobre arrays bidimensionais em Java:

1. Como declarar uma matriz 4x5 de inteiros?

2. Em uma matriz int[][] m = new int[3][4];, quantas colunas ela possui?

3. Como acessar o elemento da segunda linha e terceira coluna de matriz?

4. Qual expressão retorna o número de linhas de uma matriz mat?

5. Para percorrer todos os elementos de uma matriz, quantos loops são necessários?

Exercícios de Aplicação AFF Education

Reforce o conteúdo desta aula com mais dois exercícios práticos:

1. Como descobrir o número de linhas de uma matriz int[][] m?

2. E o número de colunas da primeira linha?