Напомните мне...

Apr 24, 2012 12:33

Почему такой код работает некорректно?

public class Member {
private double average = 0;
private List session ( Read more... )

Leave a comment

Comments 5

archcc April 25 2012, 20:19:10 UTC
Потому что неправильно пытаться пересчитывать среднее значение не обнуляя, каждый раз как дергаешь любое сравнение? оО

Reply

tsuuisou April 26 2012, 04:37:29 UTC
Про обнуление и правда не подумал, но оно именно что падает в экспшен, а не просто неверно считает. Есть какая-то особенноть у явы - нельзя в компараторах использовать значения вычисляемые во время выполнения. Я с этим и раньше когда-то сталкивался, только забыл уже все на свете.

Алсо может ты знаешь, как быстро и легко отшафлить List так, чтобы два объекта с одинаковыми атрибутами гарантированно оказались на расстоянии не меньше чем N?

Reply

archcc April 26 2012, 05:29:03 UTC
1 Избавляешься от объектов с повторяющимися атрибутами
2 Collections.shuffle(List list)
3 Вставляешь повторяющиеся объекты на нужном тебе расстоянии

Reply

tsuuisou April 26 2012, 05:49:47 UTC
Я думал сделать свой шафл, чтобы весь этот СиАОД спрятать куда подальше. Но мне не хочется создавать дополнительный List при этом - это как-то не по дзен совсем.

Кстати, а как устроен родной шафл? Подозреваю, что там просто компаратор, который выдает рандомом +1, 0, -1.

Reply


dernasherbrezon June 17 2012, 08:30:49 UTC
Смотрел минут 10. Вглядывался, но так и не понял что тут неправильно :)

Единственное что ввело в заблуждение в первом варианте это пересчёт среднего на каждом шаге сортировки. Собственно если кто то параллельно добавить в sessions новое значение то сортировка будет неверной.

Исходя из этого второй вариант это собственно оно. Среднее перевычисляется после каждой игры. После этого происходит результирующая сортировка игроков.

Reply


Leave a comment

Up