Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/328.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
Java 根据数组列表中的对象类型执行不同的行为_Java_Arrays_Arraylist - Fatal编程技术网

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

Java 根据数组列表中的对象类型执行不同的行为,java,arrays,arraylist,Java,Arrays,Arraylist,我正在实施一种考试评分系统。我会尽可能简化信息。 每次考试都可以有一个正确或错误的布尔问题、一个包含所有选项的填空问题字符串数组和一个包含所有选项的多项选择题字符串数组 每个参加考试的学生都有一张答题纸。答案可以是布尔值表示真或假,也可以是字符串数组表示填空和多项选择题,因为多项选择题也可以有多项答案。每次学生回答一个问题,它就会被添加到答题纸上 现在分级是这样进行的。对于真假问题,答案很简单。如果答案是正确的,则奖励分数。但对于填空和多项选择题,有部分学分,例如,如果学生的选择题有2/3是正确

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

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

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

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

`ArrayList<Object> answerKey = getExamAnswerKey(Exam a);`
System.out.println(answerKey);
//Outputs
[false, false, true, [A, C, D], [int, boolean, double];

有人能提出一种实现这种分级设计的方法吗?我也愿意对我的数据结构选择提出批评。我知道ArrayList的对象有一种糟糕的代码味道,但我真的想不出任何其他方法来收集所有答案

据我所知,您的问题可能需要简化以使其更清楚:

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

答案是您可以使用instanceof操作符来标识对象的子类型

for (Object answer : studentAnswers) {
    if (answer instanceof String[]) {
        // Perform string array grading behavior
    } else if (answer instanceof boolean) {
        // Perform boolean grading behavior
    }
}

你最好介绍一门课;这样做就像ifstudent.answers[index].equalsteacher.answers[index]score++一样简单;顺便说一句,你的字符串数组[A,C,D]不总是在ArrayList的第四位吗?请尽量缩小你的问题范围,让你的问题更清楚:你的很多介绍都是不必要的,你的标题可以改进。否则,这是一个写得很好的问题,表明你努力理解。我同意缩小范围的必要性。一段代码加上一段代码可能会短得多,而且不会失去任何价值或清晰度。我确实用了所有的词来增加长度,但我想充分解释我的难题,而不是在评论中一次又一次地澄清。我会尽快编辑它,只要我有时间。Thanks@Kenney你能解释一下添加另一个类会有什么帮助吗?假设我创建了一个AnswerType类。你能详细介绍一下我将如何使用它来奖励分数吗?部分信贷方面是促使我这样做的一件事,并将它们作为单独的对象对待。我需要能够将数组中的每个元素与对应的答案键进行比较。有更好的方法可以按照您所说的做,而无需使用instanceof。在这种情况下,它似乎是在用一种臭味换另一种臭味。@Chieftwoils建设性的批评是受欢迎的。告诉我我完全错了的批评是没有帮助的。这不是评论所做的。我并没有说你完全错了,因为那会表明这是行不通的;它会的。我不会重复自己,而是敦促你重新阅读它,并考虑IF的构造性。我看到你的实现与其他潜在的实现相比是很差的。这不是建设性的——建设性会告诉我,或者坦率地说,OP,因为他需要知道最好的实施方案是什么。不管怎样,你希望我表现得好像我们是同事一样。我没有责任教你一些你应该知道的东西,如果你在回答这个问题,并且回答这个问题是不正确的,因为正确地去做太广泛了,但是因为你坚持。考虑一下你还没有解决问题。他们关心的是有一个有效的对象列表。您提供了一种解决方案,该解决方案以一种不灵活、难以维护的方法的形式建立在气味之上。一个或两个额外的类是显而易见的,添加一个策略就是另一个添加。
[1, 0, 1, 2/3, 2/3] for all the respective problems (partial credit included)
for (Object answer : studentAnswers) {
    if (answer instanceof String[]) {
        // Perform string array grading behavior
    } else if (answer instanceof boolean) {
        // Perform boolean grading behavior
    }
}