Dúvida ao apresentar posições de um vetor [RESOLVIDO]

Bom dia, pessoal!!!
Estou construindo um pequeno projeto, no qual há a inserção de 5 valores distintos em um vetor. Com o vetor preenchido, eu tenho que ordená-la em ordem decrescente.
Assim que concluida a ordenação, eu devo comparar os vetores, ou seja, o valor que está sendo apresentado na posição 0 do vetor ordenado, estava em qual posição do vetor dedordenado, e devo apresentar estas posições, conclui que tenho que construir um novo vetor para armazenar estas posições.
Porém minha dúvida encontra-se: se o valor se repete no decorrer do vetor, como faço para trazer as duas ou mais posições?

[code]public class IndicadorPainel{
public static void main(String[] args) throws Exception {

    double vetorVendasVendedoras[] = new double[5];//vetor que será preenchido com o valor de vendas de cada vendedora. Esse é o vetor para armazenar os 5 números.

    for (int i = 0; i < vetorVendasVendedoras.length; i++) {
        vetorVendasVendedoras[i] = vendaCadaVendedora(i);
    }

    System.out.println("Vetor:");
    for (int i = 0; i < 5; i++) {
        System.out.println("posiçao " + i + " " + vetorVendasVendedoras[i]);
    }

    // a partir deste ponto, o algoritmo irá colocar o valor das vendas em ordem DECRESCENTE (ordenação do vetor)  
    double aux;
    boolean trocou = true;
    while (trocou) {
        trocou = false;
        for (int i = 0; i < 4; i++) {
            if (vetorVendasVendedoras[i] < vetorVendasVendedoras[i + 1]) {
                aux = vetorVendasVendedoras[i];
                vetorVendasVendedoras[i] = vetorVendasVendedoras[i + 1];
                vetorVendasVendedoras[i + 1] = aux;
                trocou = true;
            }
        }
    }
   System.out.println("Vetor Ordenado:");
    for (int i = 0; i < 5; i++) {
        System.out.println("posiçao Ordenada " + i + " " + vetorVendasVendedoras[i]);
    }

}
private static double vendaCadaVendedora(int i) {

    double venda1 = 1000.00;
    double venda2 = 250.95;
    double venda3 = 5000.00;
    double venda4 = 30000.10;
    double venda5 = 5000.00;

    if (i == 0) {
        return venda1;
    } else if (i == 1) {
        return venda2;
    } else if (i == 2) {
        return venda3;
    } else if (i == 3) {
        return venda4;
    } else {
        return venda5;
    }
}

}[/code]
No meu caso, o valor 5000 apresenta-se na posição 2 e 4 do vetor desordenado. Meu vetor que apresentará as posições deve possuir a aparencia abaixo. Com eu construo este novo vetor? Estou a disposição para novas sugestões.
*posição 0 do vetor: 3
*posição 1 do vetor: 2
*posição 2 do vetor: 4
*posição 3 do vetor: 0
*posição 4 do vetor: 1

Grata a todos!!!

Dica: esse tipo de problema pode ser resolvido usando-se 2 vetores, um com os valores, e outro com as posições (pode ser um vetor de int). Quando você troca os valores entre si, troca também as posicões.

Vou dar um exemplo. Digamos que você tenha o seguinte vetor: 1000.00, 250.95, 5000.00, 30000.10, 5000.00. (estou explicando usando a ordem crescente, mas obviamente você deve entender que é só inverter a ordem para termos a ordem decrescente :slight_smile:

Então declare um vetor para os valores, e outro para as posições (de 0 até 4, nesse caso: ). Aqui em baixo só estou listando, não estou escrevendo código Java. Faça as coisas do jeito que achar melhor, só não dá para copiar direto da explicação.

v[0] = 1000.0, pos[0] = 0
v[1] = 250.95, pos[1] = 1
v[2] = 5000.0, pos[2] = 2
v[3] = 30000.1, pos[3] = 3
v[4] = 5000.0, pos[4] = 4

Digamos que você troque entre si os valores que estão nas posições 0 e 1. Você também troca os “pos” que estão nas posições 0 e 1:
v[0] = 250.95, pos[0] = 1
v[1] = 1000.0, pos[1] = 0
v[2] = 5000.0, pos[2] = 2
v[3] = 30000.1, pos[3] = 3
v[4] = 5000.0, pos[4] = 4

E assim por diante. Você provavelmente vai ficar com algo assim, no final (dependendo do seu algoritmo - alguns algoritmos preservam a posição relativa de dois elementos que estão um depois do outro, outros não - na teoria, isso se chama “stable sorting” - http://en.wikipedia.org/wiki/Sorting_algorithm#Stability ). Como não olhei seu programa com atenção nao sei se vai ficar assim como abaixo ou não.

v[0] = 250.95, pos[0] = 1
v[1] = 1000.0, pos[1] = 0
v[2] = 5000.0, pos[2] = 2
v[3] = 5000.0, pos[3] = 4
v[4] = 30000.1, pos[4] = 3

Por exemplo, se o algoritmo não for estável (não quer dizer que ele seja ruim, ele só não tem uma determinada capacidade que às vezes é necessária), ele pode até chegar ao seguinte resultado, que não está errado:

v[0] = 250.95, pos[0] = 1
v[1] = 1000.0, pos[1] = 0
v[2] = 5000.0, pos[2] = 4
v[3] = 5000.0, pos[3] = 2
v[4] = 30000.1, pos[4] = 3

Obrigada pela ajuda!
Porém eu ainda tenho dúvidas na construção do vetor pos. :cry:

O vetor pos é bem bobinho - você deve ter visto que na posição 0 ele recebe o valor 0, na posição 1 recebe o valor 1 e assim por diante. Um “for” boboca resolve seu problema.

[quote=entanglement]Digamos que você troque entre si os valores que estão nas posições 0 e 1. Você também troca os “pos” que estão nas posições 0 e 1:
v[0] = 250.95, pos[0] = 1
v[1] = 1000.0, pos[1] = 0
v[2] = 5000.0, pos[2] = 2
v[3] = 30000.1, pos[3] = 3
v[4] = 5000.0, pos[4] = 4
[/quote]

Infelizmente minha dúvida nao se resolverá com um for, pois meu problemas está no trecho acima. Poderia me ajudar?
Obrigada!!!

public class IndicadorPainel{   
    public static void main(String[] args) throws Exception {   
  
        double vetorVendasVendedoras[] = new double[5];//vetor que será preenchido com o valor de vendas de cada vendedora. Esse é o vetor para armazenar os 5 números. 
        double vetorVendasVendedorasBanco[] = new double[5];
  
        for (int i = 0; i < vetorVendasVendedoras.length; i++) {   
            vetorVendasVendedoras[i] = vendaCadaVendedora(i);   
            vetorVendasVendedorasBanco[i]= vendaCadaVendedora(i);   

        }   
  
        System.out.println("Vetor:");   
        for (int i = 0; i < 5; i++) {   
            System.out.println("posiçao " + i + " " + vetorVendasVendedoras[i]);   
        }   
  
        // a partir deste ponto, o algoritmo irá colocar o valor das vendas em ordem DECRESCENTE (ordenação do vetor)     
        double aux;   
        boolean trocou = true;   
        while (trocou) {   
            trocou = false;   
            for (int i = 0; i < 4; i++) {   
                if (vetorVendasVendedoras[i] < vetorVendasVendedoras[i + 1]) {   
                    aux = vetorVendasVendedoras[i];   
                    vetorVendasVendedoras[i] = vetorVendasVendedoras[i + 1];   
                    vetorVendasVendedoras[i + 1] = aux;   
                    trocou = true;   
                }   
            }   
        }   
       System.out.println("Vetor Ordenado:");   
        for (int i = 0; i < 5; i++) {   
            System.out.println("posiçao Ordenada " + i + " " + vetorVendasVendedoras[i]);   
        } 

//posições antes da ordenação
  for (int i = 0; i < vetorVendasVendedoras.length; i++) {

                for (int j = 0; j < vetorVendasVendedorasBanco.length; j++) {
                    if (vetorVendasVendedoras[i] == vetorVendasVendedorasBanco[j]) {
                        pos[i] = j;
                        
                    }
                    
                }
            }
            
            for (int i = 0; i < 5; i++) {
                System.out.println("      Posições:      " + i + " " + pos[i]);
            }

}   
private static double vendaCadaVendedora(int i) {   
  
        double venda1 = 1000.00;   
        double venda2 = 250.95;   
        double venda3 = 5000.00;   
        double venda4 = 30000.10;   
        double venda5 = 5000.00;   
  
        if (i == 0) {   
            return venda1;   
        } else if (i == 1) {   
            return venda2;   
        } else if (i == 2) {   
            return venda3;   
        } else if (i == 3) {   
            return venda4;   
        } else {   
            return venda5;   
        }   
    }   
}  

Pessoal, partes do meu problema eu resolvi! Quando e tenho valores distintos, a parte do código que armazenas as posiçoes no vetor pos, está correta, mas quando há valores repetidos, o vetor armazena posiçoes repetidas. Como resolvo isto?

Porque ninguém aproveita as maravilhas do Java ? como o framework Collections !

Pessoal, resolvi o problema!!!
Agradeço a todos que me ajudaram, mas a estrutura que segui foi codificar a explicação do entanglement, e o grande detalhe está na inserção do break, para determinar a quebra da repetição quando a valores repetidos.

public class IndicadorPainel{     
    public static void main(String[] args) throws Exception {     
     
        double vetorVendasVendedoras[] = new double[5];//vetor que será preenchido com o valor de vendas de cada vendedora. Esse é o vetor para armazenar os 5 números.   
        double vetorVendasVendedorasBanco[] = new double[5];   
     
        for (int i = 0; i < vetorVendasVendedoras.length; i++) {     
            vetorVendasVendedoras[i] = vendaCadaVendedora(i);     
            vetorVendasVendedorasBanco[i]= vendaCadaVendedora(i);     
  
        }     
     
        System.out.println("Vetor:");     
        for (int i = 0; i < 5; i++) {     
            System.out.println("posiçao " + i + " " + vetorVendasVendedoras[i]);     
        }     
     
        // a partir deste ponto, o algoritmo irá colocar o valor das vendas em ordem DECRESCENTE (ordenação do vetor)       
        double aux;     
        boolean trocou = true;     
        while (trocou) {     
            trocou = false;     
            for (int i = 0; i < 4; i++) {     
                if (vetorVendasVendedoras[i] < vetorVendasVendedoras[i + 1]) {     
                    aux = vetorVendasVendedoras[i];     
                    vetorVendasVendedoras[i] = vetorVendasVendedoras[i + 1];     
                    vetorVendasVendedoras[i + 1] = aux;     
                    trocou = true;     
                }     
            }     
        }     
       System.out.println("Vetor Ordenado:");     
        for (int i = 0; i < 5; i++) {     
            System.out.println("posiçao Ordenada " + i + " " + vetorVendasVendedoras[i]);     
        }   
  
//posições antes da ordenação   
  for (int i = 0; i < vetorVendasVendedoras.length; i++) {   
  
                for (int j = 0; j < vetorVendasVendedorasBanco.length; j++) {   
                    if (vetorVendasVendedoras[i] == vetorVendasVendedorasBanco[j]) {   
                       pos[i] = j;
                        vetorVendasVendedorasBanco[j]= -1;
                        break; 
                           
                    }   
                       
                }   
            }   
               
            for (int i = 0; i < 5; i++) {   
                System.out.println("      Posições:      " + i + " " + pos[i]);   
            }   
  
}     
private static double vendaCadaVendedora(int i) {     
     
        double venda1 = 1000.00;     
        double venda2 = 250.95;     
        double venda3 = 5000.00;     
        double venda4 = 30000.10;     
        double venda5 = 5000.00;     
     
        if (i == 0) {     
            return venda1;     
        } else if (i == 1) {     
            return venda2;     
        } else if (i == 2) {     
            return venda3;     
        } else if (i == 3) {     
            return venda4;     
        } else {     
            return venda5;     
        }     
    }     
}