所以我有一个FlashCards的大LinkedList,1000卡,用于flashcard应用程序。有些以前从未见过,有些已经被看到过,并且多次猜测正确或不正确。使用比较器或多个比较器进行优先级排序?
有了这么多的卡片,我想要那些我从来没有注意到的名单上的第一个,其次是那些比他们被钉了更多的错过。
理想情况下,这将是一般规则,并不总是如此;仍然会有一张我以前见过的偶尔卡片,但其中大多数卡片是看不见的。
另外,现在我正在使用Collections.shuffle(),在上述标准中,我仍然希望卡片随机出现。
我刚熟了这个比较:
public class TimesSeenComparator implements Comparator<Card> {
public int compare(Card one, Card two){
boolean oneNeverSeen = false;
boolean twoNeverSeen = false;
if(one.getMissed() + one.getMade() == 0){ oneNeverSeen = true; }
if(two.getMissed() + two.getMade() == 0){ twoNeverSeen = true; }
if(oneNeverSeen && twoNeverSeen){ return 0; }
if(one.getMissed() > two.getMissed()){
return 1;
} else if(one.getMissed() == two.getMissed()){
return 0;
} else{
return -1;
}
}
}
它非常艰难,我知道!任何帮助表示赞赏。
编辑: 最后一个比较合作伙伴视其合同,我显然是想在一个比较器中做太多。如果您有几个比较器,然后执行Collections.sort(x,comp1),它将如何工作; Collections.sort(X,COMP2); Collections.sort(X,COMP3); ?
public class TimesSeenComparator implements Comparator<Card> {
public int compare(Card one, Card two){
boolean oneNeverSeen = false;
boolean twoNeverSeen = false;
if(one.getMissed() + one.getMade() == 0){ oneNeverSeen = true; }
if(two.getMissed() + two.getMade() == 0){ twoNeverSeen = true; }
if(oneNeverSeen && !twoNeverSeen){
return 1;
} else if(oneNeverSeen && twoNeverSeen){
return 0;
} else {
return -1;
}
}
}
能否请你澄清究竟是什么你问题是? – MyStackRunnethOver
也许分裂卡插入看见和看不见的清单和随机排序两种。然后,通过生成均匀分布的数字填充最终列表,并选择您希望它成为看到的次数的百分比。就像'r> 0.95'一样。 – ChiefTwoPencils
那是一个好主意,我给它一个镜头。 – madmax