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:
[][]matriz[linha][coluna]matriz.length = número de linhasmatriz[i].length = número de colunas da linha iExistem várias formas de declarar e inicializar matrizes:
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
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
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
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
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
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
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
Teste seus conhecimentos sobre arrays bidimensionais em Java:
Reforce o conteúdo desta aula com mais dois exercícios práticos: