我正在尝试在Android Studio中创建一个基本的测验应用程序,但我对此仍然相当陌生,不确定使用什么术语来搜索解决方案。希望这里有人能帮上忙。
用户可以从一系列主题、项目或两者的组合中进行选择,以定义他们的测验。一旦他们完成了选择,它就会被随机化,他们的测验就开始了。
主题和项目是相关的,但没有显式地联系在一起。例如,用户可以只选择一个主题行,这将提供与该主题相关的每个项目。或者,他们可以选择单列项目,这将提供与该项目相关的每个主题。
我的假设是,这必须通过XML中的二维数组来实现,like this picture.中的绿色单元格是选中的项,红色单元格是未选中的项。然后在java中操作数组。
我知道如何创建2D数组,但我没有足够的经验来确定这是正确的决定。我也不确定如何操作它。我应该接受用户的选择并使用它来创建一个新的数组吗?或者,我可以保留原始数组,将数字随机化,跳过未选中的数字吗?
如果有人能给我指出正确的方向,或者提出更好的解决方案,我将不胜感激!
发布于 2018-06-02 00:05:02
下面的代码似乎可以完成您想要对所选答案的二维数组中的所选项目执行的操作。就我的评论建议为这些信息创建一个列表,这可能是也可能不是最好的选择,因为它是主观的。
让我们使用您已经想到的东西(因为您说您已经知道如何为所选项目创建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
这是一个使用整数值而不是字符串的版本
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
然后,既然您声明要随机化选择,那么混洗应该可以在Java Collections中工作:
Collections.shuffle(selectedItemsForQuiz); //Strings
Collections.shuffle(selectedItemsNumber); //Integers
https://stackoverflow.com/questions/50642703
复制相似问题