Em Java, um array (ou vetor) é uma forma de guardar vários valores do mesmo tipo numa única estrutura. Ao contrário de outras estruturas de dados, um array tem um tamanho fixo depois de ser criado. Podes atribuir elementos a um array ou obtê-los a partir dele através de um índice. Os arrays em Java usam indexação a partir do zero: o índice do primeiro elemento é 0, o do segundo é 1, etc.
Esta é a sintaxe normal para inicializar um array:
type[] variableName = new type[size];
O type é o tipo dos elementos do array, que pode ser um tipo primitivo (por exemplo, int) ou uma classe (por exemplo, String).
O size é o número de elementos que o array vai conter (não pode ser alterado depois).
Depois de criar o array, os elementos são inicializados com os seus valores predefinidos (normalmente 0, false ou null).
// Declare array with explicit size (size is 2)
int[] twoInts = new int[2];
Também podes definir arrays com uma notação abreviada que te permite criar o array e definir os seus valores ao mesmo tempo:
// Two equivalent ways to declare and initialize an array (size is 3)
int[] threeIntsV1 = new int[] { 4, 9, 7 };
int[] threeIntsV2 = { 4, 9, 7 };
Como o compilador já consegue perceber quantos elementos o array vai ter, podes omitir o comprimento.
Podes atribuir e aceder aos elementos de um array com uma notação de índice entre parênteses retos:
// Assign second element by index
twoInts[1] = 8;
// Retrieve the second element by index and assign to the int element
int secondElement = twoInts[1];
Aceder a um índice fora dos índices válidos do array dá origem a uma IndexOutOfBoundsException.
Podes manipular arrays chamando métodos ou propriedades de uma instância de array, ou usando os métodos estáticos definidos na classe Arrays (habitualmente usados apenas em código genérico).
A propriedade length guarda o comprimento de um array.
Podes aceder-lhe assim:
int arrayLength = someArray.length;
O Java também disponibiliza uma classe utilitária muito útil, java.util.Arrays, com imensos métodos úteis relacionados com arrays (por exemplo, Arrays.equals).
O Java também suporta arrays multidimensionais, como int[][] arr = new int[3][4];, que podem ser muito úteis.
O facto de um array ser também uma coleção significa que, além de acederes aos valores por índice, podes iterar sobre todos os seus valores com um ciclo for-each:
char[] vowels = { 'a', 'e', 'i', 'o', 'u' };
for(char vowel: vowels) {
// Output the vowel
System.out.print(vowel);
}
// => aeiou
Se quiseres mais controlo sobre que valores percorrer, podes usar um ciclo for:
char[] vowels = { 'a', 'e', 'i', 'o', 'u' };
for (int i = 0; i < 3; i++) {
// Output the vowel
System.out.print(vowels[i]);
}
// => aei
És um observador de aves entusiasta que acompanha quantas aves visitaram o teu jardim nos últimos sete dias.
Tens seis tarefas, todas relacionadas com o número de aves que visitaram o teu jardim.
Para fins de comparação, guardas sempre por perto uma cópia das contagens da semana passada, que foram: 0, 2, 5, 3, 7, 8 e 4. Implementa o método BirdWatcher.getLastWeek() que devolve as contagens da semana passada:
BirdWatcher.getLastWeek();
// => [0, 2, 5, 3, 7, 8, 4]
Implementa o método BirdWatcher.getToday() para devolver quantas aves visitaram o teu jardim hoje. As contagens de aves estão ordenadas por dia, sendo o primeiro elemento a contagem do dia mais antigo e o último elemento a contagem de hoje.
int[] birdsPerDay = { 2, 5, 0, 7, 4, 1 };
BirdWatcher birdCount = new BirdWatcher(birdsPerDay);
birdCount.getToday();
// => 1
Implementa o método BirdWatcher.incrementTodaysCount() para incrementar a contagem de hoje:
int[] birdsPerDay = { 2, 5, 0, 7, 4, 1 };
BirdWatcher birdCount = new BirdWatcher(birdsPerDay);
birdCount.incrementTodaysCount();
birdCount.getToday();
// => 2
Implementa o método BirdWatcher.hasDayWithoutBirds() que devolve true se houve um dia em que zero aves visitaram o jardim; caso contrário, devolve false:
int[] birdsPerDay = { 2, 5, 0, 7, 4, 1 };
BirdWatcher birdCount = new BirdWatcher(birdsPerDay);
birdCount.hasDayWithoutBirds();
// => true
Implementa o método BirdWatcher.getCountForFirstDays() que devolve o número de aves que visitaram o teu jardim desde o início da semana, mas limita a contagem ao número especificado de dias a partir do início da semana.
int[] birdsPerDay = { 2, 5, 0, 7, 4, 1 };
BirdWatcher birdCount = new BirdWatcher(birdsPerDay);
birdCount.getCountForFirstDays(4);
// => 14
Há dias mais movimentados do que outros. Um dia movimentado é aquele em que cinco ou mais aves visitaram o teu jardim.
Implementa o método BirdWatcher.getBusyDays() para devolver o número de dias movimentados:
int[] birdsPerDay = { 2, 5, 0, 7, 4, 1 };
BirdWatcher birdCount = new BirdWatcher(birdsPerDay);
birdCount.getBusyDays();
// => 2
Inscreve-te no Exercism para aprenderes e dominares Java com 26 conceitos158 exercícios, e mentoria humana real, tudo grátis.