首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >根据数组列表中的对象类型执行不同的行为

根据数组列表中的对象类型执行不同的行为
EN

Stack Overflow用户
提问于 2015-11-09 08:02:01
回答 1查看 72关注 0票数 1

我正在实施一种考试评分系统。我会尽可能简化信息。每个考试都可以有一个对或错的问题(布尔值),一个填空的问题(包含所有选项的字符串数组)和一个多项选择题(也可以是一个包含所有选项的字符串数组)。

每个参加考试的学生都有一张答题纸。答案可以是布尔值(真或假)或字符串数组(用于填充空格和多项选择题,因为多项选择题也可以有多项答案)。每当学生回答一个问题时,它就会被添加到答题纸上。

现在,评分是这样进行的。对于正确和错误的问题,它很简单。如果答案是正确的,奖励积分。但对于填空和多项选择,有部分学分,例如,如果学生答对了2/3的选择,他就会得到2/3的分数。

我有一个名为getExamScore(考试a)的方法。这就是给学生评分的地方。我决定创建一个答案键数组列表,其中包含每个问题的所有正确答案。问题编号是索引。示例:

代码语言:javascript
复制
`ArrayList<Object> answerKey = getExamAnswerKey(Exam a);`
System.out.println(answerKey);
//Outputs
[false, false, true, [A, C, D], [int, boolean, double];

我知道有一个对象数组列表通常是不好的做法,但我想不出更好的方法来收集所有答案来比较学生的答案。我对这个学生的所有答案都有一个类似的arrayList:

代码语言:javascript
复制
ArrayList<Object> studentAnswers = getStudentAnswer(Exam a);
System.out.println(studentAnswers);
//Outputs
[False, true, true, [A, C], [int, boolean]]

这就是我被卡住的地方。当我在我的getExamScore()方法中评分时,我想检查studentAnswers的answerKey,看看要奖励多少分。但这不是一个简单的案例,仅仅是说if(studentAnswers[index].equals(answerKey[index])) score++;

因为字符串数组不能这样比较。所以我希望有这样的条件:如果answerKeyindex和studentAnswersindex是一个字符串数组,那么就有一个for循环来比较这两个数组,并给出适当的分数。如果是真错答案,简单地比较两个值,如果正确,就奖励积分。例如,示例学生的点将如下所示:

代码语言:javascript
复制
[1, 0, 1, 2/3, 2/3] for all the respective problems (partial credit included)

有没有人能建议一种实现这种分级设计的方法?我也对我的数据结构选择持开放态度。我知道ArrayList of objects有一种糟糕的代码味道,但我真的想不出其他任何方法来收集所有的答案。

EN

回答 1

Stack Overflow用户

发布于 2015-11-09 08:08:05

据我所知,您的问题(您可能应该简化它以使其更清楚)是:

给定一个ArrayList<Object>,我如何根据ArrayList的每个索引中的对象类型执行不同的行为?

答案是,您可以使用instanceof运算符来标识对象的子类型。

代码语言:javascript
复制
for (Object answer : studentAnswers) {
    if (answer instanceof String[]) {
        // Perform string array grading behavior
    } else if (answer instanceof boolean) {
        // Perform boolean grading behavior
    }
}
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33600539

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档