Atualizar valores de um ArrayList

7 respostas
dsystem

Boa tarde pessoal,

Estou com um problema. Tenho que escrever um programa no qual tenho dois ArrayList, um que seria o meu bloco e o outro que seria os processos. O que eu tenho que fazer é verificar o maior bloco e alocar o processo. E nisso o valor do meu array de blocos tem que ser atualizado subtraindo ele pelo processo, mais ou menos como exemplo abaixo

ArrayList<Integer> bloco = new ArrayList<Integer>();
        bloco.add(100);
        bloco.add(500);
        bloco.add(200);
        bloco.add(300);
        bloco.add(600);

        ArrayList<Integer> proc = new ArrayList<Integer>();
        proc.add(210);
        proc.add(410);
        proc.add(110);
        proc.add(220);
        

        int aux = 0;
        int index = 0;

        for (int j = 0; j < proc.size(); j++) {            
            for (int i = 0; i < bloco.size(); i++) {

                if (bloco.get(i) > aux) {

                    aux = bloco.get(i);
                    index = i;
                }else{
                    aux = aux;
                }

            }
            bloco.set(index, aux-proc.get(j)); //Aqui eu atualizo o meu array.
           
           
        }

O problema é que quando eu volto para o inicio do primeiro for, quando ele vai para o segundo, o valor que ele pega do bloco é o que está nas primeiras linhas, ou seja, ele não atualiza.

Alguém poderia me dar um help?

Obrigada!

7 Respostas

luciano2

Para saber qual o maior elemento de uma collection você pode usar :

Collections.max(proc)

para saber qual o indice do elemento você pode usar:

proc.indexOf(valor do elemento)

porque atribuir aux a aux? é o mesmo que você fazer set 1 = 1

}else{ aux = aux; }

eu chequei o código é parece que está atualizando sim, na primeira linha ele executa
o que ele está fazendo é colocar no indice 4 600 - o valor do processo corrente. Era isso que você queria fazer?

A

luciano@@:
Para saber qual o maior elemento de uma collection você pode usar :

Collections.max(proc)

para saber qual o indice do elemento você pode usar:

proc.indexOf(valor do elemento)

porque atribuir aux a aux? é o mesmo que você fazer set 1 = 1

}else{ aux = aux; }

eu chequei o código é parece que está atualizando sim, na primeira linha ele executa
o que ele está fazendo é colocar no indice 4 600 - o valor do processo corrente. Era isso que você queria fazer?

Collections.max(proc) Quer um desafio? Tente implementar sem usar um método pronto.

A

é verificar o maior bloco e alocar o processo.
?

luciano2

Implementar sem usar método pronto? Exatamente com que finalidade? Ele quer aprender java ou reinventar a roda?

dsystem

luciano@@

Deu certinho o que você me passou…

Na verdade, com esse comando eu modifiquei meu código, o que ficou até mesmo mais limpo.

Ficou assim

ArrayList<Integer> bloco = new ArrayList<Integer>();
        bloco.add(100);
        bloco.add(500);
        bloco.add(200);
        bloco.add(300);
        bloco.add(600);

        ArrayList<Integer> proc = new ArrayList<Integer>();
        proc.add(210);
        proc.add(410);
        proc.add(110);
        proc.add(220);
        
        int maxi = 0;

        for (int j = 0; j < proc.size(); j++) {

           maxi =  Collections.max(bloco);
           bloco.set(bloco.indexOf(maxi), maxi-proc.get(j));
            System.out.println("Bloco: " + bloco);
        }

Muito obrigada…

Quanto ao que o andre disse, andré eu entendi o que você quis dizer, acho até valido o seu conceito e assim que eu terminar o que preciso, eu vou implementar algo do tipo; mas já que a roda está pronta; vou reutiliza-la

:wink:

Valew guris!!

Bjs!

claudneto

No comecinho, eu preferia reinventar a roda.

Me mostrar o que eu posso fazer com a linguagem, o NetBeans ou Eclipse me ajuda. É só apertar Ctrl + Espaço que 80% do que eu quero está lá.

Mas gosto de saber como as coisas funcionam e é pra isso que existe a faculdade com matérias como Algoritmos e Estruturas de Dados que ensinam a implementar uma lista, pilha, deque, fila, lista dinâmica…tudo em C pra não pegar nada pronto.

dsystem

Claudneto,

Eu tive aula de algoritmo de dados na faculdade, há uns 3 anos atrás… naquele tempo eu gostava de programar mas não sabia nada, então meio que boiava nas coisas… E agora surgiu essa oportunidade para reviver esses momentos de algoritmo de dados… Foi então que comecei a pesquisar…

Claro que esses comandos do luciano@@ são tentadores, pois nos leva a uma resolução pelo caminho mais fácil…

Mas na verdade esse projeto não é pra mim… Então eu peguei a forma mais curta para se fazer… Mas assim que eu entender como que funciona tudo isso, eu vou tentar implementar um método próprio. Sei que no começo quebrarei cabeça (como pode ser visto no primeiro código), mas creio que conseguirei entender mais e absorver muito mais coisas…

De qualquer forma, eu agradeço a todos vocês. A ajuda e as criticas serão sempre bem-vindas.

E se tiverem mais alguma coisa a falar, ou algum material, por favor, me passem…

:wink:

Criado 28 de abril de 2011
Ultima resposta 28 de abr. de 2011
Respostas 7
Participantes 4