Заказ ArrayList <BigDecimal>с пузырьковой сортировкой - PullRequest
0 голосов
/ 10 декабря 2018

Я пытаюсь заказать Arraylist, который содержит BigDecimal ценность денег от самого большого до самого маленького.Это мой код:

 public void bubble_sort(ArrayList<String> nameArray, ArrayList<BigDecimal> priceArray){
    for (int i = 0; i < priceArray.size(); i++){
        for (int j = 0; j < priceArray.size() - 1; j++){
            if (priceArray.indexOf(j) > priceArray.indexOf(j+1)){
                int temp = priceArray.indexOf(j);
                priceArray.set(j, priceArray.get(j+1));
                priceArray.set(j+1, BigDecimal.valueOf(temp));
            }
        }
    }
    Log.v("Ordering array", priceArray.toString());

}

Но порядок все тот же, что и у исходного массива.Что мне делать?

Ответы [ 2 ]

0 голосов
/ 10 декабря 2018

Прежде всего, для чего вы используете String Array nameArray?Не заметил этого в вашем коде.Если я правильно понял, я думаю, вы хотите что-то вроде этого:

    public void bubble_sort(ArrayList<String> nameArray, ArrayList<BigDecimal> priceArray){

        boolean swap=true;
        double temp=0;
        while (swap){
        swap=false;
        for (int i = 0; i < priceArray.size()-1; i++){
       if (priceArray.indexOf(j) > priceArray.indexOf(j+1)){
            temp = priceArray.indexOf(j);
            priceArray.set(j, priceArray.get(j+1));
            priceArray.set(j+1, BigDecimal.valueOf(temp));
        }
        swap=true
        }
        }
}
                Log.v("Ordering array", priceArray.toString());
            }
}
0 голосов
/ 10 декабря 2018

Вы сравниваете индексы вместо значений.

Измените это

if (priceArray.indexOf(j) > priceArray.indexOf(j+1)){
    int temp = priceArray.indexOf(j);
    priceArray.set(j, priceArray.get(j+1));
    priceArray.set(j+1, BigDecimal.valueOf(temp));
}

на

if (priceArray.get(j).compareTo(priceArray.get(j+1) > 0){
    BigDecimal temp = priceArray.get(j);
    priceArray.set(j, priceArray.get(j+1));
    priceArray.set(j+1, temp);
}
...