为了账号安全,请及时绑定邮箱和手机立即绑定

数组的随机问题

数组的随机问题

陪伴而非守候 2023-04-13 10:39:38
我们在项目中为大学创建了一个小测验应用程序。但我们不是程序员。我现在已经创建了 17 个问题并将它们打包到 17 个数组中。问题始终位于数组的位置 0。答案总是在数组的位置 1。一切也都正常工作。但我想插入一个随机订单。我已经尝试过 Switch Case 或 randomshuffle,没有成功,答案不再与问题匹配。如果有人能帮助我们,我会很高兴。非常感谢。这是第17个阵列。我认为将它们全部展示是没有意义的。    String[] frage17 = new String[5];    frage17[0] = "Marke";    frage17[4] = "Produkt/Dienstleistung";    frage17[2] = "Preis/Verkaufsbedingungen";    frage17[3] = "Distribution";    frage17[1] = "Kommunikation";现在这是我的手动订单。我现在如何在不更改数组的情况下创建随机顺序?    fragen.add(0, frage17);    fragen.add(1, frage11);    fragen.add(2, frage13);    fragen.add(3, frage4);    fragen.add(4, frage7);    fragen.add(5, frage1);    fragen.add(6, frage5);    fragen.add(7, frage16);    fragen.add(8, frage9);    fragen.add(9, frage8);    fragen.add(10, frage10);    fragen.add(11, frage2);    fragen.add(12, frage12);    fragen.add(13, frage14);    fragen.add(14, frage15);    fragen.add(15, frage6);    fragen.add(16, frage3);最后输出:ArrayList<String[]> getFragen() {    return fragen;
查看完整描述

3 回答

?
哔哔one

TA贡献1854条经验 获得超8个赞

理想情况下,您需要的是Map问题和答案之间的间隔,这样即使问题被打乱,您也总能得到正确的答案。

Map<String,String> map = new HashMap<>();
map.put("How are you?","I am fine"); // similarly for all questions

然后使用map.entrySet()得到EntrySet<Key,Value>一对。此外,您甚至可以使用Collections.shuffle(new ArrayList<>(map.entrySet()));shuffle 获得的EntrySet. 最好的祝愿!


查看完整回答
反对 回复 2023-04-13
?
慕哥9229398

TA贡献1877条经验 获得超6个赞

从你想要完成的事情来看,根据每个frage项目的要求创建一个类,然后创建一个这样的项目的数组会更有意义。


从您发布的代码来看,您似乎在使用 Java,因此,这是创建类的代码部分:


public static class frage   {

    private String data01;

    private String data02;

    private String data03;

    private String data04;

    private String data05;



    public frage(String data01, String data02, String data03, String data04, String data05) {

        this.data01 = data01;

        this.data02 = data02;

        this.data03 = data03;

        this.data04 = data04;

        this.data05 = data05;

    }


    public String getData01()   {

        return data01;

    }


    public String getData02()   {

        return data02;

    }


    public String getData03()   {

        return data03;

    }


    public String getData04()   {

        return data04;

    }


    public String getData05()   {

        return data05;

    }

}

此类相当于您创建的包含 5 个字符串的数组。要创建此类的项目,请这样做:


frage frage1 = new frage("Marke", "Produkt/Dienstleistung", "Preis/Verkaufsbedingungen", "Distribution", "Kommunikation");

同样,创建其余的对象。data01根据您的方便修改在类中声明的名称和其他变量(字符串)。


由于您提到您没有编码经验,因此要从您可以使用的项目中获取数据:


String result = frage1.getData01();

这frage1是我在前面的代码片段中创建的项目。data01并且存在于内部的数据frage1现在存在于内部result,您可以随心所欲地使用这些数据。


现在,创建一个项目列表frage,在上面的代码片段中,我创建了frage1,以同样的方式创建其他 16 个项目(或任意数量)!


像这样创建ArrayList:


ArrayList<frage> fragen = new ArrayList<frage>();

并将这些项目放入上面创建的数组列表中:


fragen.add(frage1);

同样,添加您创建的其余项目。现在,每当你想frage从 arraylist 中获取一个随机项时,首先导入java.util.Random并创建一个 的对象Random,即将其添加到程序的最开头:


import java.util.Random;


Random rand = new Random();

现在,无论何时在程序中你想得到 的随机项frage,使用这个代码:


frage random_item = fragen.get(rand.nextInt(fragen.size()));

因此,您将获得一个随机frage项目,其中包含有关您问题的所有详细信息。这里,frage是我们创建的类的名称,fragen是我们创建的 ArrayList 的名称,是应该在开始时创建的rand实例。Random


如果你想data01从random_item你刚刚得到的,使用:


String data = random_item.getData01();

现在data将包含 的值data01。希望这对您有所帮助。如果您想澄清一些事情,请将其张贴在评论中,我会尽力提供帮助;)


查看完整回答
反对 回复 2023-04-13
?
千巷猫影

TA贡献1829条经验 获得超7个赞

您应该创建一个类来保存每个问题和答案,而不是在此处使用数组。经验法则是数组应该用于一系列相似的对象。在这种情况下,“问题”和“答案”不相似,因此您不应使用数组。

当您使用这种方法时,洗牌问题变得非常简单。您创建一个Listwith 新类的实例,然后洗牌该列表。


查看完整回答
反对 回复 2023-04-13
  • 3 回答
  • 0 关注
  • 134 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信