From 85b451aaf2c44d6b8332d9278297388f2363766f Mon Sep 17 00:00:00 2001 From: vinicius Date: Wed, 13 Jan 2021 09:14:48 -0300 Subject: [PATCH] primeira solucao LAB4 -- arrays --- Album/src/Album.java | 72 +++++++++++++++++++++++++++++----------- Album/src/Figurinha.java | 6 ++-- Album/src/Pacotinho.java | 16 ++++++--- 3 files changed, 69 insertions(+), 25 deletions(-) diff --git a/Album/src/Album.java b/Album/src/Album.java index 1ac808b..30578e7 100644 --- a/Album/src/Album.java +++ b/Album/src/Album.java @@ -1,59 +1,93 @@ +import java.util.ArrayList; + public class Album { public static final int PERCENTUAL_MINIMO_PARA_AUTO_COMPLETAR = 90; // 90% + private Figurinha[] figurinhasColadas; + + private int contRepetidas[]; + + private int totalFigurinhasColadas; + + private int totalFigurinhasRepetidas; + private int quantFigurinhasPorPacotinho; + private int tamanhoDoAlbum; + public Album(int tamanhoDoAlbum, int quantFigurinhasPorPacotinho) { - // ToDo IMPLEMENT ME!!!! + figurinhasColadas = new Figurinha[tamanhoDoAlbum + 1]; + contRepetidas = new int[tamanhoDoAlbum + 1]; + this.quantFigurinhasPorPacotinho = quantFigurinhasPorPacotinho; + this.tamanhoDoAlbum = tamanhoDoAlbum; } public void receberNovoPacotinho(Pacotinho pacotinho) { for (Figurinha fig : pacotinho) { - - - // ToDo IMPLEMENT ME!! + int posicao = fig.getPosicao(); + if (figurinhasColadas[posicao] == null) { + // figurinha inédita! + colarFigurinhaInedita(fig); + } else { + // figurinha repetida! + contRepetidas[posicao]++; + totalFigurinhasRepetidas++; + } } } + private void colarFigurinhaInedita(Figurinha fig) { + figurinhasColadas[fig.getPosicao()] = fig; + totalFigurinhasColadas++; + } + + public void autoCompletar() { // verifica se o álbum já está suficientemente cheio + if (this.totalFigurinhasColadas >= + this.tamanhoDoAlbum * PERCENTUAL_MINIMO_PARA_AUTO_COMPLETAR / 100f) { + for (int i = 1; i <= this.tamanhoDoAlbum; i++) { + if (this.figurinhasColadas[i] == null) { + Figurinha fig = new Figurinha(i); + colarFigurinhaInedita(fig); + } + } + } - // ToDo IMPLEMENT ME!! } public int getTamanho() { - // ToDo IMPLEMENT ME!!! - return 0; + return this.tamanhoDoAlbum; } public int getQuantFigurinhasPorPacotinho() { - // ToDo IMPLEMENT ME!!! - return 0; + return this.quantFigurinhasPorPacotinho; } public int getQuantFigurinhasColadas() { - // ToDo IMPLEMENT ME!!! - return 0; + return this.totalFigurinhasColadas; } public int getQuantFigurinhasRepetidas() { - // ToDo IMPLEMENT ME!!! - return 0; + return this.totalFigurinhasRepetidas; } public boolean possuiFigurinhaColada(int posicao) { - // ToDo IMPLEMENT ME!!! - return false; + if (posicao < 1 || posicao > this.tamanhoDoAlbum) { + return false; + } + return this.figurinhasColadas[posicao] != null; } public boolean possuiFigurinhaRepetida(int posicao) { - // ToDo IMPLEMENT ME!!! - return false; + if (posicao < 1 || posicao > this.tamanhoDoAlbum) { + return false; + } + return this.contRepetidas[posicao] > 0; } public int getQuantFigurinhasFaltantes() { - // ToDo IMPLEMENT ME!!! - return 0; + return this.tamanhoDoAlbum - this.totalFigurinhasColadas; } } diff --git a/Album/src/Figurinha.java b/Album/src/Figurinha.java index ffd87d8..321d64c 100644 --- a/Album/src/Figurinha.java +++ b/Album/src/Figurinha.java @@ -1,13 +1,15 @@ public class Figurinha { - public Figurinha(int posicao) { + private int posicao; + public Figurinha(int posicao) { + this.posicao = posicao; } /** * @return A posição que esta figurinha deve ocupar no álbum */ public int getPosicao() { - return 0; // ToDo IMPLEMENT ME!!!! + return this.posicao; } } diff --git a/Album/src/Pacotinho.java b/Album/src/Pacotinho.java index 3fbde07..0ce2523 100644 --- a/Album/src/Pacotinho.java +++ b/Album/src/Pacotinho.java @@ -1,9 +1,12 @@ import java.util.ArrayList; +import java.util.Random; public class Pacotinho extends ArrayList { private Album album; + private static Random random = new Random(); + // ToDo atributo que seja uma estrutura para guardar as figurinhas deste pacotinho public Pacotinho(Album album) { @@ -17,8 +20,14 @@ public Pacotinho(Album album, int[] posicoes) { this.album = album; // verificar se o tamanho do array está correto; - // caso não esteja, throw new RuntimeException("Pacotinho no tamanho errado!"); + if (posicoes.length != album.getQuantFigurinhasPorPacotinho()) { + throw new RuntimeException("Pacotinho no tamanho errado!"); + } + for (int posicao : posicoes) { + Figurinha fig = new Figurinha(posicao); + add(fig); + } } private void adicionarFigurinhasAleatorias() { @@ -27,14 +36,13 @@ private void adicionarFigurinhasAleatorias() { for (int i = 1; i <= quantFigurinhasPorPacotinho; i++) { // ToDo sorteia uma posição entre 1 e o tamanho do álbum - int posicao = 0; + int posicao = 1 + random.nextInt(maxPosicao); // ToDo cria um novo objeto Figurinha informando a posição sorteada + Figurinha figurinha = new Figurinha(posicao); // ToDo adiciona ao pacotinho - - Figurinha figurinha = new Figurinha(posicao); add(figurinha); } }