Olá galera blz estou com uma dúvida na verdade sou novo trabalhando com estrutura de dados dentro do java e tenho um problema para resolver fiquei até meio assim de postar aqui pois tenho total consciência de não postar o enunciado pois não quero q ninguém faça para mim e sei que isso vai contra as regras do fórum porém se puderem ler o pdf o link pois a minha duvida é.
No final ele diz que eu posso escolher qualquer estrutura eu até comecei com uma porem empaquei.
E cai na duvida cruel de qual seria a melhor estrutura para resolver o problema visando que tenho me de recomeçar e ser um tempo perdido novamente, pois tenho q entregar amanha.
Entendo que alguém mais experiente lendo o enunciado saberia qual estrutura usar para um fácil manipulação dos dados e implementação.Eu não busco nada pronto apenas gostaria de uma clareada de ideias acho que se tiver alguém que leciona aulas vai entender a minha peleja como aluno, pois as vezes travamos e não conseguimos sair do lugar. Ou pode ser que eu esteja indo mal mesmo na matéria e não estou vendo a resolução que está clara.
Bom de qualquer forma segue:
Peço desculpas se estou indo contra as regras do fórum.
Mais estou empacado nisso a dias fritando os nerônios e não consigo sair do lugar.
Como eu disse na primeira postagem eu não estava aqui procurando pronto.
Apesar de ninguém ter conseguido responder minha dúvida estou postando aqui a solução do meu problema.
No caso não sei se está correta ainda, pois ainda não obtive o feedback do meu tutor.
Porém foi o mais próximo que cheguei do enunciado.
Espero que possa ajudar alguém caso necessário.
Motivo da escolha da ED:
Utilizamos Lista Ligada para o projeto. Levamos em consideração o fato de que com a Lista Ligada pode-se adicionar elementos em qualquer posição sem ter que refazer a estrutura com um tamanho maior. Da mesma forma para a remoção, onde podemos remover o primeiro grupo de classes de uma determinada fila sem ter que redimensionar a estrutura de dados, ou seja, não precisamos deslocar as outras pessoas da fila após uma remoção ou inserção na mesma.
Informo que foi em grupo o projeto então tem códigos misturados ai, porém acho que da para entender.
public static LinkedList filaGeral;
public static int quantidadeFilas;
public static int quantidadeClasses;
public static int tamanhoGrupos;
public static int contadorClasses;
public static boolean iniciou = false;
public static int classesAtuais;
/**
@param args the command line arguments
*/
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
String digitado;
String metodo;
while (true) {
digitado = scan.nextLine();
if (digitado.matches("(\\d+)\\s{1}(\\d+)\\s{1}(\\d+)")) {
iniciar(Integer.parseInt(digitado.replaceAll("(\\d+)\\s{1}(\\d+)\\s{1}(\\d+)", "$1")),
Integer.parseInt(digitado.replaceAll("(\\d+)\\s{1}(\\d+)\\s{1}(\\d+)", "$2")),
Integer.parseInt(digitado.replaceAll("(\\d+)\\s{1}(\\d+)\\s{1}(\\d+)", "$3")));
} else if (digitado.matches("[I][N][S][E][R][E]\\s{1}(\\d+)\\s{1}(\\w{1,10})")) {
insere(Integer.parseInt(digitado.replaceAll("[I][N][S][E][R][E]\\s{1}(\\d+)\\s{1}(\\w{1,10})", "$1")),
digitado.replaceAll("[I][N][S][E][R][E]\\s{1}(\\d+)\\s{1}(\\w{1,10})", "$2"));
} else if (digitado.matches("[R][E][M][O][V][E]\\s{1}(\\d+)")) {
remove(Integer.parseInt(digitado.replaceAll("[R][E][M][O][V][E]\\s{1}(\\d+)", "$1")));
} else {
metodo = digitado.replaceAll("(\\w+)(\\s+)(.*)", "$1");
switch (metodo) {
case "IMPRIME":
imprime();
break;
case "FIM":
fim();
default:
System.out.println("Comando inválido");
}
}
}
}
/*
Método que inicia a fila geral e as sub filas
@ author Rafael - Willian - Rodrigo - Fábio
@ param f - valor para a quantidade de filas que terá
@ param c - valor para a quantidade de Classes que poderá ter
@ param g - valor para a quantidade que um grupo de classes pode assumir na fila
*/
public static void iniciar(int f, int c, int g) {
quantidadeClasses = c;
quantidadeFilas = f;
tamanhoGrupos = g;
classesAtuais = 0;
if (!(quantidadeFilas >= 1)) {
System.out.println("Quantidade de Filas inválida");
return;
}
if (!(quantidadeClasses >= 0)) {
System.out.println("Quantidade de Classes inválida");
return;
}
if (!(tamanhoGrupos >= 1)) {
System.out.println("Tamanho para os grupos inválido");
return;
}
filaGeral = new LinkedList<LinkedList>();
for (int i = 0; i < quantidadeFilas; i++) {
filaGeral.add(new LinkedList<LinkedList>());
}
iniciou = true;
}
/*
Método que inseri uma nova pessoa na melhor fila
@ author Rafael - Willian - Rodrigo - Fábio
@ param pessoa - identificacao de uma pessoa
@ param classe - identifica a classe que esta pessoa pertence
*/
public static void insere(int pessoa, String classe) {
boolean achouClasse = false;
for (int cont1 = 0; cont1 < quantidadeFilas; cont1++) {
for (int cont2 = 0; cont2 < filaGeral.get(cont1).size(); cont2++) {
if (classe.equals((filaGeral.get(cont1).get(cont2) + "").replaceAll("(\\w+)\\d+", "$1"))) {
achouClasse = true;
}
}
}
if (!achouClasse) {
classesAtuais++;
}
if ((iniciou && (classesAtuais <= quantidadeClasses)) || (achouClasse)) {
int menorFila = 0;
int tamanhoMenorFila = filaGeral.get(0).size();
boolean podeParar = false;
int tamanhoPelaClasse = filaGeral.get(0).size();
int menorPelaClasse = 0;
boolean podeInserir = true;
for (int i = 1; i < quantidadeFilas; i++) {
if (filaGeral.get(i).size() < tamanhoMenorFila) {
tamanhoMenorFila = filaGeral.get(i).size();
menorFila = i;
}
}
for (int i = 0; i < quantidadeFilas; i++) {
boolean primeiraPassagem = true;
int contador = 0;
for (int j = 0; j < filaGeral.get(i).size(); j++) {
int percorrendoPosicao = filaGeral.get(i).size();
if (classe.equals((filaGeral.get(i).get(j) + "").replaceAll("(\\w+)\\d+", "$1"))) {
percorrendoPosicao = j;
while (classe.equals((filaGeral.get(i).get(percorrendoPosicao) + "").replaceAll("(\\w+)\\d+", "$1"))) {
percorrendoPosicao++;
if (primeiraPassagem) {
contador++;
}
if (percorrendoPosicao == filaGeral.get(i).size()) {
break;
}
}
primeiraPassagem = false;
}
if (percorrendoPosicao < tamanhoMenorFila) {
if (!(contador >= tamanhoGrupos)) {
tamanhoPelaClasse = j;
tamanhoMenorFila = percorrendoPosicao;
menorFila = i;
} else {
podeInserir = false;
}
}
}
}
if (podeInserir) {
filaGeral.get(menorFila).add(tamanhoMenorFila, classe + pessoa);
}
}
}
/*
Método que imprimi todas as filas
em ordem
@ author Rafael - Willian - Rodrigo - Fábio
*/
public static void imprime() {