Jump to content
tipereira

ordenar numeros de uma lista

Recommended Posts

tipereira

boas, estou aqui com um problema em ordenar uma lista, por exemplo, recebo lista1={1,6,0,-3,-10,34}e tenho que imprimir uma segunda lista em que os numeros ja estejam ordenados (lista2={-10,-3,0,1,6,34})

ate agora o que conseguir fazer (e mal  :) ) foi:

   

public static void main(String[] args) {

        int[] lista1 = {2, -5, -121, 102, -35, -2, 0, -125, 802, -10};
        int[] lista2 = new int[10];
        int[] lista3 = new int[10];
        int i,aux,x=0;

        aux=lista1[0];
        do{
        for (i = 1; i < lista1.length; i++) {

                if (aux<lista1[i])
                    lista2[i--]=aux;
                else
                    lista2[i]=lista1[i];
                    aux=lista1[i];
           
        }
        }

        while (lista2 [ x ]< lista2[ x++ ]);
        
        for (i = 0; i < lista2.length; i++) {
            System.out.print(lista2[i]);
        }
        System.out.println(" ");
    }

Share this post


Link to post
Share on other sites
brunoais

É melhor comçar a corrigir pelo mais óbvio.

1º: Corrije essa indentação para se ler melhor. Tens aí alguma indentação mas não é suficiente.

2º:

   

public static void main(String[] args) {
...
        for (i = 1; i < lista1.length; i++) {

                if (aux<lista1[i])
                    lista2[i--]=aux; // Erro1
                else
                    lista2[i]=lista1[i];
                    aux=lista1[i]; // Erro 2?
           
        }
        
        }

        while (lista2 [ x ]< lista2[ x++ ]); // Erro 3
...

Erro1 : Nunca uses o operador -- ou ++ numa situação destas (dentro de um indicador do índice de um array)! O problema de debug é logo a duplicar (ou mais)!

As variáveis de controlo de um for nunca se alteram dentro das "chavetas" do for!

Isto é um principio de programação básico e muito importante para fazer código legível e evitar erros!

Erro2: Não sei se queres isto no else. Se queres então faltam chavetas, se não queres, com essa indentação estás a enganar a quem esteja a ler.

Erro3: Por motivos de legibilidade, num do{}while o w é o próximo caracter a aparecer depois do }. Isto é importantíssimo para ter um código minimamente legível, evitar erros de interpretação e acelerar o debugging.

Depois disto resolvido, já fico pronto para te ajudar a resolver o problema.


"[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31

Life is a genetically transmitted disease, induced by sex, with death rate of 100%.

Share this post


Link to post
Share on other sites
KTachyon

Até porque com x++, o x só é incrementado depois da instrução :)


“There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult.”

-- Tony Hoare

Share this post


Link to post
Share on other sites
asworm

Até porque com x++, o x só é incrementado depois da instrução :)

txina pá ainda hoje o prof de Inteligência Artificial veio com essa na aula...

BTW esta instrucão

lista2[i--]=aux;

não sei se queres mesmo fazer isto, mas como foi referido acima não são boas práticas de programação mexer no contador do for... se não for para alterar o valor do contador tens de usar "i-1", pois -- funciona como atribuição

esse erro é identico ao mítico if(i=10) -> if(i==10)....


Got it?

Share this post


Link to post
Share on other sites
KTachyon

Quanto muito poderias fazer --i e ++x, mas, mais uma vez estás a quebrar uma das regras éticas da programação ao fazê-lo dessa forma :)


“There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult.”

-- Tony Hoare

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.