java—如何停止数组上的字符串重复

b0zn9rqh  于 2021-07-07  发布在  Java
关注(0)|答案(3)|浏览(306)

我们有一个大学作业,我要读一个有名字列表的文件,每个文件加上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 + ")\n\n");

            }

        }

        fw.close();

    }
}
3pmvbmvn

3pmvbmvn1#

if (!btoys.contains(sf.getRandomBoyToy().equals(sf.getRandomBoyToy()))) {
    btoys.add(sf.getRandomBoyToy());
    x++;
}

生成3个玩具,首先将其中的2个玩具相互比较,并检查结果布尔值是否存在于字符串列表中(可能不存在),然后附加第3个玩具。
相反,您应该生成一个,并将其用于检查和添加:

String toy = sf.getRandomBoyToy();
if(!btoys.contains(toy)) {
    btoys.add(toy);
    x++;
}
x8goxv8g

x8goxv8g2#

只需使用集合数据结构而不是列表。

ktca8awb

ktca8awb3#

java.util包中的set接口和collection接口的扩展是一个无序的对象集合,其中不能存储重复的值。它是一个实现数学集合的接口。此接口包含从集合接口继承的方法,并添加了限制重复元素插入的功能。有两个接口扩展set实现,即

for (String boys : kids) {
    Set<String> btoys = new HashSet<String>();
    btoys.add(sf.getRandomBoyToy());

    if (boys.endsWith("M")) {
        fw.write(boys + " (" + btoys + ")\n\n");
    }
}

相关问题