我试图在Android Studio中创建一个基本的测验应用,但我还是比较新,并且不确定使用什么术语来搜索解决方案。希望有人可以提供帮助。
用户可以从一系列主题,项目或两者的组合中进行选择,以定义他们的测验。 一旦他们完成了选择,它就会随机化并开始测验。
主题和项目是相关的,但未明确关联。例如,用户只能选择一个主题行,这将提供与该主题相关的每个项目。或者他们可以选择一列项目,这将提供与该项目相关的每个主题。
我的假设是,这必须通过XML中的2D数组实现,like this picture.绿色单元格是选定的项目,红色单元格是未选择的。然后在java中操作数组。
我知道如何制作2D阵列,但我没有足够的经验来确定这是正确的决定。我也不确定如何操作它。我应该选择用户并使用它来创建新阵列吗?或者我可以保留原始数组,随机化数字并跳过那些没有被选中的数据吗?
如果有人能指出我正确的方向,或建议更好的解决方案,我们将不胜感激!
答案 0 :(得分:0)
下面的代码似乎可以完成您想要对所选答案的二维数组中的所选项目执行的操作。至于我的评论建议为这些信息创建列表,这可能是也可能不是最佳选择,因为它是主观的。
让我们使用您已经想到的内容(因为您已经知道如何为所选项目创建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值而不是字符串
的版本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