我们有一项大学作业,我必须阅读一份包含姓名列表的文件,并向每份文件添加最多3份礼物。我能做到,但礼物在重复,名单上的一些人不止一次收到同一份礼物。我该如何阻止它,让每个人每次都收到不同种类的礼物?
这是我的代码:
public static void main(String[] args) throws IOException {
String path = "Christmas.txt";
String line = "";
ArrayList<String> kids = new ArrayList<>();
FileWriter fw = new FileWriter("Deliveries.txt");
SantasFactory sf = new SantasFactory();
try (Scanner s = new Scanner(new FileReader("Christmas.txt"))) {
while (s.hasNext()) {
kids.add(s.nextLine());
}
}
for (String boys : kids) {
ArrayList<String> btoys = new ArrayList<>();
int x = 0;
while (x < 3) {
if (!btoys.contains(sf.getRandomBoyToy().equals(sf.getRandomBoyToy()))) {
btoys.add(sf.getRandomBoyToy());
x++;
}
}
if (boys.endsWith("M")) {
fw.write(boys + " (" + btoys + ")nn");
}
}
fw.close();
}
}
只需使用Set数据结构而不是List。
if (!btoys.contains(sf.getRandomBoyToy().equals(sf.getRandomBoyToy()))) { btoys.add(sf.getRandomBoyToy()); x++; }
生成3个玩具,首先将其中2个玩具相互比较,然后检查结果布尔值是否存在于字符串列表中(可能不存在(,然后追加第三个
相反,您应该生成一个,并将其用于检查和添加:
String toy = sf.getRandomBoyToy();
if(!btoys.contains(toy)) {
btoys.add(toy);
x++;
}
java.util包中的set接口和Collection接口的扩展是一个无序的对象集合,其中不能存储重复的值。它是一个实现数学集的接口。此接口包含从Collection接口继承的方法,并添加了一个限制插入重复元素的功能。有两个接口扩展了集合实现,即
for (String boys : kids) {
Set<String> btoys = new HashSet<String>();
btoys.add(sf.getRandomBoyToy());
if (boys.endsWith("M")) {
fw.write(boys + " (" + btoys + ")nn");
}
}