Я новичок в Дарте; и я создал список объектов игральных карт под названием Deck. Я пытаюсь выбрать случайную карту, а затем удалить карту из колоды. Я получаю дубликаты, так как кажется, что последующие карты выбираются до того, как колода уменьшается. Как мне справиться с будущей цепочкой событий, когда из колоды будут выбраны 10 уникальных случайных карт?
class Card{
String face;
String suit;
String rank;
String imgSrc;
String holdImgSrc;
Card(
this.face,
this.suit,
this.rank,
this.imgSrc,
this.holdImgSrc
);
}
import 'dart:math' show Random;
Random indexGen = new Random();
getCard1(){
card1 = deck[indexGen.nextInt(deck.length)];
deck.removeWhere((item) => item == card1);
return card1;
}
getCard2(){
card2 = deck[indexGen.nextInt(deck.length)];
deck.removeWhere((item) => item == card2);
return card2;
}
Когда я пытаюсь вернуть объект карты в качестве будущего, я получаю:
new Future((getCard1()))
.then((getCard2()))
.then((getCard3()));
тип «Карта» не является подтипом типа «() => dynamic» типа «вычисление».
Когда я пытаюсь вернуть список колод, я получаю:
тип «Список» не является подтипом типа «() => динамический» для «вычисления».
Мне не хватает правильного синтаксиса, ошибка в моей логике или мне нужно обрабатывать список по-другому, возможно, наблюдая за изменениями?
отредактируйте, чтобы добавить: синтаксис фьючерсов работает, однако удаление, похоже, происходит неправильно. Я изменил код на код, предложенный Jim-Y ниже, за исключением предварительной загрузки новых объектов Card из списка с использованием второго именованного конструктора. Измененный код и распечатка выглядят следующим образом:
fullDeck[
...
var tenC = new Card.full(17,'10_of_clubs','c','10','10_of_clubs.png','10_of_clubs_h.png');
var tenD = new Card.full(18,'10_of_diamonds','d','10','10_of_diamonds.png','10_of_diamonds_h.png');
var tenS = new Card.full(19,'10_of_spades','s','10','10_of_spades.png','10_of_spades_h.png');
var tenH = new Card.full(20,'10_of_clubs','c','10','10_of_clubs.png','10_of_clubs_h.png');
...]
Deck<Card> deck = new Deck<Card>();
Random indexGen = new Random();
for(var c = 0; c < 20; ++c) {
var card = new Card(c);
deck.add(fullDeck[c]);//List of 52 full card objects
}
for(var i = 0; i < 10; ++i) {
var rnd = indexGen.nextInt(deck.size());
print('${deck.get(rnd).face} Deck size: ${deck.size()}');
}
}
4_of_clubs Deck size: 19
10_of_diamonds Deck size: 18
5_of_clubs Deck size: 17
4_of_spades Deck size: 16
5_of_spades Deck size: 15
10_of_clubs Deck size: 14
10_of_clubs Deck size: 13
3_of_spades Deck size: 12
5_of_diamonds Deck size: 11
3_of_diamonds Deck size: 10
Как видите, 10 треф печатается дважды. Итак, если число 10 было удалено на этапе 6, почему оно все еще существует на этапе 7?
card1
иcard2
вы используете вgetCardX()
- person Günter Zöchbauer   schedule 26.05.2014new Future(getCard1).then((_)=>getCard2()).then((_)=>getCard3())
. Он по-прежнему не запоминает карты, которые были удалены. - person lrn   schedule 26.05.2014