Есть несколько незначительных изменений, которые, я думаю, вам нужно внести в код, который должен решить ваши проблемы.
Давайте посмотрим на эту часть кода:
int j = i - 1;
Baller tempx = playersNames.get(i);
Baller tempy = playersNames.get(j);
while (j >= 0 && tempx.getName().compareToIgnoreCase(tempy.getName())< 0){
playersNames.set(i, tempy);
playersNames.set(j+1, tempx);
j--;
}
Идея здесь состоит в том, чтобы неоднократно менять местами текущий элемент с предыдущим элементом, пока он не окажется в нужном месте. Это правильная идея, но есть небольшая ошибка: после замены tempy
по-прежнему ссылается на элемент, который был в позиции playersNames.get(i - 1)
, поэтому следующая итерация цикла будет сравнивать не те два элемента. Кроме того, вы всегда выполняете обмен в позиции i
(где начинается текущий элемент), но вы должны выполнять обмен в позиции j+1
(где в данный момент находится текущий элемент).
Чтобы изменить это, у вас есть несколько вариантов. Я думаю, что самым чистым вариантом было бы исключить переменные tempx
и tempy
, чтобы гарантировать, что вы не можете случайно совершить эту ошибку и вместо этого просто получить доступ к вещам по индексу. Например:
int j = i - 1;
while (j >= 0 &&
playersNames.get(j).getName().compareToIgnoreCase(playersNames.get(j+1).getName().getName()) < 0){
Baller temp = playersNames.get(j);
playersNames.set(j, playersNames.get(j+1));
playersNames.set(j+1, temp);
j--;
}
person
templatetypedef
schedule
27.08.2015