Percursos
/
Java
Java
/
Exercícios
/
Observador de aves
Observador de aves

Observador de aves

Exercício de aprendizagem

Introdução

Arrays

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

Instruções

É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.

1. Verifica quais foram as contagens da semana passada

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]

2. Verifica quantas aves visitaram hoje

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

3. Incrementa a contagem de hoje

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

4. Verifica se houve um dia sem aves a visitar o jardim

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

5. Calcula o número de aves visitantes nos primeiros dias

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

6. Calcula o número de dias movimentados

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
Editar via GitHub A ligação abre numa nova janela ou separador
Java Exercism

Estás pronto para começar Observador de aves?

Inscreve-te no Exercism para aprenderes e dominares Java com 26 conceitos158 exercícios, e mentoria humana real, tudo grátis.