【问题标题】:Random questions with arrays带数组的随机问题
【发布时间】:2019-11-30 15:34:11
【问题描述】:

我们在一个项目中为大学创建了一个小测验应用程序。但我们不是程序员。我现在创建了 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;

【问题讨论】:

  • 声明一个类以将问题和答案放在一起。将这些实例放入您的问题列表中,然后随机播放。
  • 我对您当前的“设计”不够了解。您可以使用Collections.shuffle 随机播放整个集合或使用Math.random 获取随机索引。

标签: java android arrays int


【解决方案1】:

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

当您使用这种方法时,改组问题变得非常简单。您使用新类的实例创建一个 List,然后随机播放该列表。

【讨论】:

    【解决方案2】:

    根据您想要完成的任务,根据每个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 是我在之前的代码 sn-p 中创建的项目。并且frage1data01 中存在的数据现在存在于result 中,您可以随意使用这些数据。

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

    像这样创建一个ArrayList

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

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

    fragen.add(frage1);
    

    同样,添加您创建的其余项目。现在,无论何时你想从数组列表中获取一个随机的frage 项目,首先导入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 的实例。

    如果您想从刚刚获得的random_item 中获得data01,请使用:

    String data = random_item.getData01();
    

    data 现在将包含data01 的值。希望这会有所帮助。如果您想澄清某些事情,请将其发布在 cmets 中,我会尽力提供帮助;)

    【讨论】:

      【解决方案3】:

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

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

      然后使用map.entrySet() 得到EntrySet&lt;Key,Value&gt; 对。 此外,你甚至可以使用Collections.shuffle(new ArrayList&lt;&gt;(map.entrySet()));来打乱获得的EntrySet。祝你好运!

      【讨论】:

      • 这里的地图绝对比数组好。但是,映射无法为键和值分配含义。我认为类是更好的解决方案。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-11
      • 2012-08-23
      • 2018-08-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多