Dúvida Cruel

1 resposta
wyllvp

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.

Att.

1 Resposta

wyllvp

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.

Atenciosamente,

import java.util.LinkedList;
import java.util.Scanner;

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
/**
 *
 * @author wyllvp
 */
public class FilaBrasileira {

    public static LinkedList<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() {

        for (int i = 0; i < quantidadeFilas; i++) {

            System.out.print("#" + (i + 1) + ": ");

            for (int j = 0; j < filaGeral.get(i).size(); j++) {

                System.out.print(filaGeral.get(i).get(j) + " ");

            }
            System.out.println();
        }
        System.out.println();
    }

    /*
     * Método que remove um grupo de classe que estiver na frente de uma fila
     * 
     * @ author Rafael - Willian - Rodrigo - Fábio
     * 
     * @ param fila - identifica qual a fila que sera retirada o grupo de classes
     * que estiver na frente
     * 
     * 
     */
    public static void remove(int fila) {

        if (fila > 0 && fila <= filaGeral.size()) {

            String classeExcluir = (filaGeral.get(fila - 1).get(0) + "").replaceAll("(\\w+)\\d+", "$1");

            while (filaGeral.get(fila - 1).size() > 0
                    && classeExcluir.equals((filaGeral.get(fila - 1).get(0) + "").replaceAll("(\\w+)\\d+", "$1"))) {

                filaGeral.get(fila - 1).removeFirst();

            }
        }

    }

    /*
     * Método que finaliza a aplicação
     * 
     * @ author Rafael - Willian - Rodrigo - Fábio
     * 
     */
    public static void fim() {
        System.exit(0);
    }
}
Criado 31 de maio de 2013
Ultima resposta 11 de jun. de 2013
Respostas 1
Participantes 1