Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/378.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 从二维阵列中随机选择_Javascript_Java_Android_Arrays_Android Studio - Fatal编程技术网

Javascript 从二维阵列中随机选择

Javascript 从二维阵列中随机选择,javascript,java,android,arrays,android-studio,Javascript,Java,Android,Arrays,Android Studio,我正试图在Android Studio中创建一个基本的测验应用程序,但我对这个还是相当陌生,不确定用什么术语来搜索解决方案。希望这里有人能帮忙 用户可以从一系列主题、项目或两者的组合中进行选择,以定义他们的测验。 一旦他们完成了他们的选择,它就会随机化,他们的测验就开始了 主题和项目是相关的,但不是显式连接的。例如,用户只能选择一个主题行,该行将提供与该主题相关的每个项目。或者他们可以选择一列项目,提供与该项目相关的每个主题 我的假设是,这必须通过XML中的2D数组来实现,绿色单元格是选中的项目

我正试图在Android Studio中创建一个基本的测验应用程序,但我对这个还是相当陌生,不确定用什么术语来搜索解决方案。希望这里有人能帮忙

用户可以从一系列主题、项目或两者的组合中进行选择,以定义他们的测验。 一旦他们完成了他们的选择,它就会随机化,他们的测验就开始了


主题和项目是相关的,但不是显式连接的。例如,用户只能选择一个主题行,该行将提供与该主题相关的每个项目。或者他们可以选择一列项目,提供与该项目相关的每个主题

我的假设是,这必须通过XML中的2D数组来实现,绿色单元格是选中的项目,红色单元格是未选中的项目。然后用java操作数组

我知道如何创建二维阵列,但我没有足够的经验来确定这是正确的决定。我也不知道如何操作它。我应该接受用户的选择并使用它来创建一个新数组吗?或者我可以保留原始数组,随机化数字并跳过那些未选中的


如果有人能为我指出正确的方向,或提出更好的解决方案,我将不胜感激

下面的代码似乎可以完成您想要对二维选定答案数组中的选定项执行的操作。就我建议为这些信息创建一个列表的评论而言,这可能是最好的选择,也可能不是,因为这是主观的

让我们使用您已经想到的内容(因为您说您已经知道如何为所选的项目创建2D数组),但接下来让我们将您的数组转换为ArrayList,因为我确实觉得它们提供了更好的结构

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.stream.Collectors;

String[][] twoDimentionalArrayOfEverything = { 
        {"item1", "item2", "item3"}, 
        {"item4", "item5", "item6"}, 
        {"item7", "item8", "item9"} };

ArrayList<String> selectedItemsForQuiz = 
   Arrays.stream(twoDimentionalArrayOfEverything)
    .flatMap(a -> Arrays.stream(a))
    //filter selected items
    .filter(b->b.equals("item1") || b.equals("item9") )
    //now turn to a collection
    .collect(Collectors.toCollection(() -> new ArrayList<String>()));

    //loop the list
    selectedItemsForQuiz.forEach(System.out::println);  //item1 and item9 

从你的图像来看,主题和项目似乎是相互关联的,这是有道理的。如果是这种情况,单独使用某种类型的列表结构可能更易于可视化和处理,其中每个列表都是一个主题,每个主题的项目都包含在列表中。如果必须具有二维结构,可能类似于List listOfList=new ArrayList();?主题和项目是相关的,但不是显式连接的。例如,用户只能选择一个主题行,该行将提供与该主题相关的每个项目。或者他们可以选择一列项目,提供与该项目相关的每个主题。感谢您花时间完成所有这些。这里有很多我不熟悉的方法,所以在确认答案之前,我会花一些时间仔细考虑它们。现在@Samm…基本上我所做的就是使用streams和lambdas(Java 8)简化二维数组到随机选择答案的数组列表之间的转换。创建ArrayList后,您所要做的就是使用列表中收集的项目构建测验-我使用lambda和streams所做的一切都可以使用循环来完成,但是我觉得没有loops代码更容易阅读,更不复杂。我研究了lambda,这对我来说是一个新的东西。在过去的一周里,我越来越不确定是否需要将数据存储在2D数组中。我实际上需要的是以这种方式对数据进行概念化,以保持其组织性。目前,我正在使用电子表格输入数据,然后将该电子表格转换为JSON。目前,我正在研究如何使用JSON来达到我想要的效果。如果您使用Android(或实际上使用几乎任何语言),SQLite是一个易于学习/实现的数据库。这样,您就不必担心在各种文件类型/数据结构之间解析数据,您可以将数据存储在数据库中,然后在需要时使用数据:SQLite绝对是正确的选择。我花了一点时间才意识到这一点,但这正是我想要的。再次感谢你的帮助。
Integer[][] answerNumbers = { 
            {1, 2, 3}, 
            {4, 5, 6}, 
            {7, 8, 9} };

ArrayList<Integer> selectedItemsNumber = Arrays.stream(answerNumbers)
       .flatMap(a -> Arrays.stream(a))
        //filter selected items
        .filter(b->b.equals(1) || b.equals(9) )
        //now turn to a collection
       .collect(Collectors.toCollection(() -> new ArrayList<>()));

selectedItemsNumber.forEach(System.out::println);  //1 and 9 
Collections.shuffle(selectedItemsForQuiz);  //Strings
Collections.shuffle(selectedItemsNumber);  //Integers