7  Arrays

Coleções de tamanho fixo e acesso por índice

7.1 Objetivos de aprendizagem

Ao concluir este capítulo, você deverá ser capaz de:

  • criar e inicializar arrays;
  • respeitar os limites dos índices;
  • escolher entre for tradicional e for-each;
  • calcular soma, média, maior e menor valor;
  • copiar um array sem compartilhar a mesma referência.

7.2 Tamanho fixo e índices

Quatro posições consecutivas identificadas pelos índices zero, um, dois e três.

Índices válidos de um array com quatro elementos.

Um array guarda vários valores do mesmo tipo e tem tamanho fixo. Seus índices começam em zero. Em um array de quatro elementos, os índices válidos são 0, 1, 2 e 3.

String[] comandos = {"oi", "ajuda", "dica", "sair"};
System.out.println(comandos[0]); // oi
System.out.println(comandos.length); // 4

A linguagem garante acesso por índice e tamanho fixo; detalhes sobre a disposição física dos objetos na memória pertencem à implementação da JVM e não são necessários para usar arrays corretamente.

7.3 Inicialização e valores padrão

int[] contadores = new int[3];       // 0, 0, 0
boolean[] estados = new boolean[2];  // false, false
String[] respostas = new String[2];  // null, null

Arrays de tipos primitivos recebem valores padrão. Arrays de objetos recebem null até que cada posição seja preenchida.

7.4 Percorrendo com segurança

public class Capitulo06Arrays {
    public static void main(String[] args) {
        double[] notas = {7.0, 8.5, 10.0, 6.5};
        double soma = 0.0;
        double maior = notas[0];

        for (double nota : notas) {
            soma += nota;
            if (nota > maior) {
                maior = nota;
            }
        }

        double media = soma / notas.length;
        System.out.printf("Média: %.2f%n", media);
        System.out.printf("Maior nota: %.2f%n", maior);
    }
}

Use for-each para ler todos os valores. Use o for com índice quando precisar alterar posições ou trabalhar com dois arrays em paralelo:

for (int indice = 0; indice < comandos.length; indice++) {
    System.out.println(indice + " -> " + comandos[indice]);
}

A condição correta é indice < comandos.length. Usar <= tentaria acessar uma posição inexistente.

7.5 Utilitários e cópia

A classe Arrays oferece ordenação, busca e representação textual:

import java.util.Arrays;

int[] valores = {9, 3, 7, 1};
Arrays.sort(valores);
System.out.println(Arrays.toString(valores));

A atribuição direta compartilha o mesmo array. Para obter uma cópia independente:

int[] copia = Arrays.copyOf(valores, valores.length);

7.6 Evolução do projeto: versão 6

Use um array para armazenar os comandos obrigatórios do chatbot. Percorra-o para montar a mensagem de ajuda. O tamanho ainda é fixo, o que torna visível a limitação que será resolvida com List.

O exemplo completo está em examples/src/Capitulo06Arrays.java.

7.7 Prática verificável

Crie um array com cinco tempos de estudo, em minutos, e mostre total, média, maior e menor valor.

Casos de teste:

Entrada Resultado esperado
{30, 40, 20, 50, 10} total 150, média 30
um único elemento maior, menor e média iguais ao elemento
array vazio deve ser rejeitado antes de acessar o índice zero
AvisoCaso vazio

Antes de usar valores[0], confirme que valores.length > 0.