Кнопки setText из перетасованных позиций элементов списка отображают неправильные результаты

У меня есть массив строк с числами "25", "50", "75", "100", и я использую метод ниже, чтобы перетасовать позиции элементов списка.

public List<String> listNums() {

    List<String> numList = Arrays.asList(Nums);

    Collections.shuffle(numList);
    return numList;

У меня также есть этот метод для назначения элементов списка 4 кнопкам:

protected void SetTxtNums(){
    NumGenerator numGen = new NumGenerator();

    bNum2.setText(numGen.listNums().get(0).toString());
    bNum3.setText(numGen.listNums().get(1).toString());
    bNum4.setText(numGen.listNums().get(2).toString());
    bNum5.setText(numGen.listNums().get(3).toString());
}

И я пытаюсь, нажав на другую кнопку, изменить текст на кнопки выше, что не работает. Код onClick таков:

case R.id.bNumGen:
        SetTxtNums();           
        break;

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

Если я включу тост для тестирования следующим образом:

Toast.makeText(getApplicationContext(), numGen.listBigNums().toString(), Toast.LENGTH_LONG).show();

затем на тосте я получаю правильные результаты, кнопки совершенно разные и с одинаковыми значениями для двух или даже трех из них. Где моя ошибка?


person dancer_69    schedule 18.04.2013    source источник


Ответы (2)


Во-первых, вы перетасовывали разные списки, а не нужный. А во-вторых, ваша логика неверна. Попробуйте что-то вроде этого.

List<String> numList = Arrays.asList(Nums);
public List<String> listNums() {
return numlist;
}

public void shuffleList() {
    Collections.shuffle(intList);
    return numList;
}

теперь делай так:

protected void SetTxtNums(){
    NumGenerator numGen = new NumGenerator();
    numGen.shuffleList();

    bNum2.setText(numGen.listNums().get(0).toString());
    bNum3.setText(numGen.listNums().get(1).toString());
    bNum4.setText(numGen.listNums().get(2).toString());
    bNum5.setText(numGen.listNums().get(3).toString());
}
person Android Killer    schedule 18.04.2013
comment
Там нет разных списков, просто опечатка (intlist). я исправил код - person dancer_69; 18.04.2013
comment
Да, работает спасибо. Но можете ли вы объяснить, в чем была моя логическая ошибка (если не трудно)? - person dancer_69; 18.04.2013
comment
@dancer_69 Конечно. Вы перемешиваете список каждый раз, когда вызываете функцию listNums(). Так что в большинстве случаев может быть вероятность того, что одно и то же число окажется в одном и том же месте. Понятно? - person Android Killer; 18.04.2013
comment
Понятно. Большое спасибо за объяснение. - person dancer_69; 18.04.2013

numGen.listNums()

каждый раз возвращает новый рандомизированный список.

person njzk2    schedule 18.04.2013