Java 使用random generator向列表中添加元素而不具有重复项

Java 使用random generator向列表中添加元素而不具有重复项,java,if-statement,while-loop,conditional-statements,Java,If Statement,While Loop,Conditional Statements,我的任务的目标是生成一个礼物列表(具有最大金额价格),其中包含来自另一个列表的礼物。最大金额(totalePrijs)不能超过500,并且您不能在生成的列表中多次显示相同的内容。选择的礼物是用一个随机生成器完成的,该生成器最多可生成27份(礼物数量) 除了同一件礼物不止一次的部分外,它工作得很好。我还没弄明白。或者我正在考虑创建一个空的IntegerArray,并检查该数组是否包含x,如果包含x,那么它应该从while语句开始重新启动,否则它将向该数组添加x并继续 我想的另一个方法是将if语句改

我的任务的目标是生成一个礼物列表(具有最大金额价格),其中包含来自另一个列表的礼物。最大金额(totalePrijs)不能超过500,并且您不能在生成的列表中多次显示相同的内容。选择的礼物是用一个随机生成器完成的,该生成器最多可生成27份(礼物数量)

除了同一件礼物不止一次的部分外,它工作得很好。我还没弄明白。或者我正在考虑创建一个空的IntegerArray,并检查该数组是否包含x,如果包含x,那么它应该从while语句开始重新启动,否则它将向该数组添加x并继续

我想的另一个方法是将if语句改为

if (selectedCadeauModel.contains(present.name) && totalePrijs + present.price < 500)
/


present.name
永远不会等于
Cadeau
的任何实例,您需要自己手动搜索列表以查找任何可能的匹配项。您可以覆盖
Cadeau
类的
equals
hashcode
以返回适当的值,这可能会使使用
contains
之类的内容变得更容易。最常见/最好的方法是使用,然后获取列表中的前N个值。
cadeauModel
selectedCadeauModel
的类型是什么?模型中可以存在多少不同的值?无限循环可能会产生,因为您最多可以从
cadeauModel
中选择前27条记录,但如果这27条记录无法满足500的价格,那么循环必然会重复,但决不会选择任何记录,因为唯一性是冲突的。要提供更多信息,请告知这两个数据集的类型以及第一个列表中可以存在多少记录。另外,如果price不是500,但前27条记录已经完成,那么应该是
如果不包含&&…
,否则我会按照程序员的建议,重写
equals
hashcode
方法。
selectedCadeauModel.clear();         
      double totalePrijs = 0;

    while (totalePrijs < 500) {
        NumberGen ran = new NumberGen();
        int x = Integer.parseInt(ran.toString());            
        Cadeau present = (Cadeau) cadeauModel.elementAt(x);
        if (totalePrijs + present.price < 500) {
            totalePrijs += present.price;
            selectedCadeauModel.addElement(new Cadeau(present.name, present.price));
        } else {
            break;
        }            
        ftxTotaalPrijs.setValue(totalePrijs);
        lstGeneratedPresents.setModel(selectedCadeauModel);
        ftxGemiddeldePrijs.setValue(totalePrijs / selectedCadeauModel.size());
    }
public class Cadeau {

String name;
double price;

public Cadeau(String naam, double prijs) {
    name = naam;
    price = prijs;
}
public class NumberGen {

Random randomGenerator = new Random();
int getal = randomGenerator.nextInt(27);

@Override
public String toString() {
    return String.format("%d", getal);
}
}