Para a execução de um trabalho da faculdade eu preciso implementar prioridade em uma fila.
O professor não está disponível para retirada de dúvidas há 4 dias e o prazo de entrega do trabalho é hoje às 23:00, alguma dica de como proceder?
Me foram disponibilizados 4 arquivos, sendo 1 de teste:
package br.paduan;
/**
* ARQUIVO 1 - App.java
*/
public final class App {
private App() {
}
/**
* Says hello to the world.
* @param args The arguments of the program.
*/
public static void main(String[] args) {
Lista lista = new Lista();
lista.addEnd("Huguinho");
lista.addEnd("Zezinho");
lista.addEnd("Luizinho");
lista.addStart("Patinhas");
System.out.println(lista.show());
No temp = lista.removeName("Huguinho");
System.out.println("Removeu " + temp.getName());
System.out.println(lista.show());
}
}
package br.paduan;
/*
* ARQUIVO 2 - Lista.java
*/
public class Lista {
private No first;
public Lista(){
first = null;
}
public boolean isEmpty(){
return first == null;
}
public void addEnd(String name){
No newNode = new No(name);
if(isEmpty()){
first = newNode;
}else{
No aux = first;
while(aux.getNext() != null){
aux = aux.getNext();
}
aux.setNext(newNode);
}
}
public void addStart(String name){
if(isEmpty()){
addEnd(name);
}else{
No newNode = new No(name);
newNode.setNext(first);
first = newNode;
}
}
public No removeStart(){
if(isEmpty()){
return null;
}
No aux = first;
first = first.getNext();
return aux;
}
public No removeEnd(){
if(isEmpty()){
return null;
}
No aux = first;
No previous = null;
while(aux.getNext() != null){
previous = aux;
aux = aux.getNext();
}
if(previous == null){
first = null;
}else{
previous.setNext(null);
}
return aux;
}
public boolean exist(String name){
if(!isEmpty()){
No aux = first;
while(aux != null){
if(aux.getName().equals(name)){
return true;
}
aux = aux.getNext();
}
}
return false;
}
public No removeName(String name){
if(!isEmpty()){
No aux = first;
No previous = aux;
while(aux != null){
if(aux.getName().equals(name)){
if(aux == first){
return removeStart();
}
if(aux.getNext() == null){
return removeEnd();
}
previous.setNext(aux.getNext());
return aux;
}
previous = aux;
aux = aux.getNext();
}
}
return null;
}
public String show(){
String out = "";
No aux = first;
while(aux != null){
out += aux.getName() + ";" ;
aux = aux.getNext();
}
return out;
}
}
package br.paduan;
/*
* ARQUIVO 3 - No.java
*/
public class No {
private String name;
private No next;
public No(String name){
this.name = name;
next = null;
}
public String getName(){
return name;
}
public No getNext(){
return next;
}
public void setNext(No next){
this.next = next;
}
}
package br.paduan;
/*
* ARQUIVO 4 - ListaTest.java
*/
import org.junit.Test;
import static org.junit.Assert.*;
import org.junit.Before;
public class ListaTest {
private FilaPriority fila;
private final String name1 = "Nome1";
private final String name2 = "Nome2";
private final String name3 = "Nome3";
private final int priority1 = 1;
private final int priority2 = 2;
private final int priority3 = 3;
@Before
public void setup() {
fila = new FilaPriority();
}
@Test
public void testIsEmpty() {
boolean vazia = fila.isEmpty();
assertTrue("Uma fila nova deve iniciar vazia.", vazia);
}
@Test
public void testNotEmpty() {
fila.add(name1, priority1);
boolean vazia = fila.isEmpty();
assertFalse("Uma fila com um elemento não deve estar vazia.", vazia);
}
@Test
public void testAddEndOnEmptyList() {
fila.add(name1, priority1);
String out = fila.show();
String expected = name1 + "(" + priority1 + ")" + ";";
assertEquals("Após inserção deve ser exibido o nome " + name1, expected, out);
}
@Test
public void testAddHighestPriority() {
fila.add(name1, priority1);
fila.add(name2, priority2);
String out = fila.show();
String expected = name2 + "(" + priority2 + ")" + ";" + name1 + "(" + priority1 + ")" + ";";
assertEquals("Após inserção de dois nomes amobos deve ser exibidos respeitando a ordem", expected, out);
}
@Test
public void testLowestPriority() {
fila.add(name2, priority2);
fila.add(name1, priority1);
String out = fila.show();
String expected = name2 + "(" + priority2 + ")" + ";" + name1 + "(" + priority1 + ")" + ";";
assertEquals("Após inserção de dois nomes amobos deve ser exibidos respeitando a ordem", expected, out);
}
@Test
public void testAddMiddlePriority() {
fila.add(name1, priority1);
fila.add(name3, priority3);
fila.add(name2, priority2);
String out = fila.show();
String expected = name3 + "(" + priority3 + ")" + ";" + name2 + "(" + priority2 + ")" + ";" + name1 + "("
+ priority1 + ")" + ";";
assertEquals("Após inserção de dois nomes amobos deve ser exibidos respeitando a ordem", expected, out);
}
@Test
public void testAddRepeatedPriorityOnStart() {
fila.add(name1, priority1);
fila.add(name3, priority3);
fila.add(name2, priority2);
fila.add(name3, priority3);
String out = fila.show();
String expected = name3 + "(" + priority3 + ")" + ";" + name3 + "(" + priority3 + ")" + ";" + name2 + "("
+ priority2 + ")" + ";" + name1 + "(" + priority1 + ")" + ";";
assertEquals("Após inserção de dois nomes amobos deve ser exibidos respeitando a ordem", expected, out);
}
@Test
public void testAddRepeatedPriorityOnEnd() {
fila.add(name1, priority1);
fila.add(name3, priority3);
fila.add(name2, priority2);
fila.add(name1, priority1);
String out = fila.show();
String expected = name3 + "(" + priority3 + ")" + ";" + name2 + "(" + priority2 + ")" + ";" + name1 + "("
+ priority1 + ")" + ";" + name1 + "(" + priority1 + ")" + ";";
assertEquals("Após inserção de dois nomes amobos deve ser exibidos respeitando a ordem", expected, out);
}
@Test
public void testAddRepeatedPriorityOnMiddle() {
fila.add(name1, priority1);
fila.add(name2, priority2);
fila.add(name3, priority3);
fila.add(name2, priority2);
String out = fila.show();
String expected = name3 + "(" + priority3 + ")" + ";" + name2 + "(" + priority2 + ")" + ";" + name2 + "("
+ priority2 + ")" + ";" + name1 + "(" + priority1 + ")" + ";";
assertEquals("Após inserção de dois nomes amobos deve ser exibidos respeitando a ordem", expected, out);
}
@Test
public void testRemoveOnEmptyList() {
Node removido = fila.remove();
assertEquals("Remoção de uma fila vazia deve retornar null", null, removido);
}
@Test
public void testRemoveLastItem() {
fila.add(name1, priority1);
String nome = fila.remove().getName();
boolean vazia = fila.isEmpty();
assertEquals("Deve ser removido o nome que estava no início da fila", name1, nome);
assertTrue("A Fila ficou fazia", vazia);
}
@Test
public void testRemoveStart() {
fila.add(name1, priority1);
fila.add(name2, priority2);
String nome = fila.remove().getName();
assertEquals("Deve ser removido o nome que estava no início da fila", name2, nome);
}
@Test
public void testPeekOnEmptyQueue(){
Node primeiro = fila.peek();
assertEquals("Se a fila está fazia o primeiro elemento é null", null, primeiro);
}
@Test
public void testPeek(){
fila.add(name1, priority1);
Node primeiro = fila.peek();
assertEquals("Validando o primeiro elmento da fila", name1, primeiro.getName());
}
}