Skip to content

Commit

Permalink
Evitando pessimo uso de memoria
Browse files Browse the repository at this point in the history
  • Loading branch information
vinicius committed Jan 18, 2021
1 parent 56aa4f1 commit 74f8362
Show file tree
Hide file tree
Showing 7 changed files with 212 additions and 167 deletions.
28 changes: 19 additions & 9 deletions Album/src/Album.java → Album/src/AlbumFigurinhas.java
@@ -1,11 +1,13 @@
import java.util.ArrayList;

public class Album {
public class AlbumFigurinhas {

public static final int PERCENTUAL_MINIMO_PARA_AUTO_COMPLETAR = 90; // 90%

private ArrayList<Figurinha> figurinhasColadas;

private RepositorioFigurinhas repositorioFigurinhas;

private int contRepetidas[];

private int totalFigurinhasColadas;
Expand All @@ -16,7 +18,11 @@ public class Album {

private int tamanhoDoAlbum;

public Album(int tamanhoDoAlbum, int quantFigurinhasPorPacotinho) {
public AlbumFigurinhas(RepositorioFigurinhas repositorioFigurinhas, int quantFigurinhasPorPacotinho) {

this.repositorioFigurinhas = repositorioFigurinhas;
this.tamanhoDoAlbum = repositorioFigurinhas.getTamanhoDoAlbum();

figurinhasColadas = new ArrayList<>();
/* inaugre as posições do ArrayList para que possam ser
acessadas diretamente via set() */
Expand All @@ -29,12 +35,12 @@ acessadas diretamente via set() */
this.tamanhoDoAlbum = tamanhoDoAlbum;
}

public void receberNovoPacotinho(Pacotinho pacotinho) {
for (Figurinha fig : pacotinho) {
public void receberNovoPacotinho(PacotinhoFigurinhas pacotinhoFigurinhas) {
for (Figurinha fig : pacotinhoFigurinhas) {
int posicao = fig.getPosicao();
if (figurinhasColadas.get(posicao) == null) {
// figurinha inédita!
colarFigurinhaInedita(fig);
colarFigurinhaInedito(fig);
} else {
// figurinha repetida!
contRepetidas[posicao]++;
Expand All @@ -43,8 +49,8 @@ public void receberNovoPacotinho(Pacotinho pacotinho) {
}
}

private void colarFigurinhaInedita(Figurinha fig) {
figurinhasColadas.set(fig.getPosicao(), fig);
private void colarFigurinhaInedito(Figurinha figurinha) {
figurinhasColadas.set(figurinha.getPosicao(), figurinha);
totalFigurinhasColadas++;
}

Expand All @@ -55,8 +61,8 @@ public void autoCompletar() {
this.tamanhoDoAlbum * PERCENTUAL_MINIMO_PARA_AUTO_COMPLETAR / 100f) {
for (int i = 1; i <= this.tamanhoDoAlbum; i++) {
if (this.figurinhasColadas.get(i) == null) {
Figurinha fig = new Figurinha(i);
colarFigurinhaInedita(fig);
Figurinha figurinha = repositorioFigurinhas.obterFigurinhaDoRepositorio(i);
colarFigurinhaInedito(figurinha);
}
}
}
Expand Down Expand Up @@ -96,4 +102,8 @@ public boolean possuiFigurinhaRepetida(int posicao) {
public int getQuantFigurinhasFaltantes() {
return this.tamanhoDoAlbum - this.totalFigurinhasColadas;
}

public Figurinha getFigurinhaColada(int posicao) {
return this.figurinhasColadas.get(posicao);
}
}
110 changes: 110 additions & 0 deletions Album/src/AlbumFigurinhasTest.java
@@ -0,0 +1,110 @@
import org.junit.Before;
import org.junit.Test;

import static org.junit.Assert.*;

public class AlbumFigurinhasTest {

private AlbumFigurinhas albumFigurinhas;
private RepositorioFigurinhas repositorioFigurinhas;

private static final int TAMANHO_DO_ALBUM = 200;
private static final int FIGURINHAS_POR_PACOTE = 3;

@Before // roda antes de cada teste
public void setUp() {
this.repositorioFigurinhas = new RepositorioFigurinhas(
"Repositorio Teste", TAMANHO_DO_ALBUM);

this.albumFigurinhas = new AlbumFigurinhas(repositorioFigurinhas, FIGURINHAS_POR_PACOTE);
}

private void popularAlbum(int[] posicoesDesejadas) {
PacotinhoFigurinhas pacote = new PacotinhoFigurinhas(
this.repositorioFigurinhas, posicoesDesejadas);
this.albumFigurinhas.receberNovoPacotinho(pacote);
}

@Test
public void testarPossuiFigurinhaParaFigurinhasExistentes() {
popularAlbum(new int[] {1, 2, 3});

for (int i = 1; i <= FIGURINHAS_POR_PACOTE; i++) {
assertTrue("Figurinhas já inseridas devem ser encontradas",
this.albumFigurinhas.possuiFigurinhaColada(i));
}
}

@Test
public void testarPossuiFigurinhaParaFigurinhasAusentes() {
popularAlbum(new int[] {1, 2, 3});

assertFalse("Não devemos encontrar no álbum figurinhas nunca inseridas",
this.albumFigurinhas.possuiFigurinhaColada(4));
assertFalse("Não devemos encontrar figurinhas de posições não-positivas",
this.albumFigurinhas.possuiFigurinhaColada(-390));
assertFalse("Não devemos encontrar figurinhas maiores do que o tamanho",
this.albumFigurinhas.possuiFigurinhaColada(TAMANHO_DO_ALBUM + 1));
}

@Test
public void testarPossuiRepetidaParaFigurinhaRepetida() {
popularAlbum(new int[] {1, 2, 3});

assertFalse(this.albumFigurinhas.possuiFigurinhaRepetida(2)); // sanity check

popularAlbum(new int[] {2, 8, 9});
assertTrue(this.albumFigurinhas.possuiFigurinhaRepetida(2));
}

@Test
public void testarGetTamanhoAlbum() {
assertEquals(TAMANHO_DO_ALBUM, this.albumFigurinhas.getTamanho());
}

@Test
public void testarGetContFigurinhas() {
popularAlbum(new int[] {1, 2, 3});
assertEquals(FIGURINHAS_POR_PACOTE, this.albumFigurinhas.getQuantFigurinhasColadas());

// vou agora abrir outro pacotinho com as mesmas figurinhas
// e verificar que o álbum terá ainda 3 figurinhas

popularAlbum(new int[] {1, 2, 3});
assertEquals(FIGURINHAS_POR_PACOTE, this.albumFigurinhas.getQuantFigurinhasColadas());
}

@Test
public void testarGetQuantasFaltam() {
popularAlbum(new int[] {1, 2, 3});
assertEquals(TAMANHO_DO_ALBUM - FIGURINHAS_POR_PACOTE,
this.albumFigurinhas.getQuantFigurinhasFaltantes());
}

@Test
public void testarAutoCompletar() {
albumFigurinhas.autoCompletar();
assertEquals("Não deve ser possível auto-completar um álbum que esteja vazio",
TAMANHO_DO_ALBUM, albumFigurinhas.getQuantFigurinhasFaltantes());

// agora vamos adicionar pacotinhos aleatório até o álbum ficar quase cheio

int minimoFigurinhasColadasParaAutoCompletar =
(int) (TAMANHO_DO_ALBUM * AlbumFigurinhas.PERCENTUAL_MINIMO_PARA_AUTO_COMPLETAR / 100f);

while (albumFigurinhas.getQuantFigurinhasColadas() < minimoFigurinhasColadasParaAutoCompletar) {
PacotinhoFigurinhas novoPacotinho = new PacotinhoFigurinhas(
this.repositorioFigurinhas, FIGURINHAS_POR_PACOTE); // aleatório
albumFigurinhas.receberNovoPacotinho(novoPacotinho);
}

// sanity check
assertTrue(albumFigurinhas.getQuantFigurinhasFaltantes() > 0);

albumFigurinhas.autoCompletar();

assertEquals(0, albumFigurinhas.getQuantFigurinhasFaltantes()); // álbum completo!

}

}
104 changes: 0 additions & 104 deletions Album/src/AlbumTest.java

This file was deleted.

8 changes: 7 additions & 1 deletion Album/src/Figurinha.java
@@ -1,6 +1,12 @@
public class Figurinha {

private int posicao;
private final int posicao;

private String urlDaImagem;

private int alturaEmPixels;

private int larguraEmPixels;

public Figurinha(int posicao) {
this.posicao = posicao;
Expand Down
53 changes: 0 additions & 53 deletions Album/src/Pacotinho.java

This file was deleted.

0 comments on commit 74f8362

Please sign in to comment.