Java中的封装思想,模拟考试批卷系统
首先我们看一下题目要求:
定义考题类(Question)及其子类
完成考题类(Question),单选题(SingleChoice)和多选题(MultiChoice)是其子类
要求:
1)Question包含题干属性(text)
2)Question包含检测标准答案的方法 boolean check(int[] answers)
参数answers:用户提供的答案(注意:单选题只有一个答案)
3)单选题(SingleChoice)和多选题(MultiChoice)是Question的子类
MultiChoice包含属性:
选项:String[] options
多选标准答案:int[] answers
SingleChoice包含属性:
选项:String[] options
单选标准答案:int answers
4)在MultiChoice实现参数为(String text,String[] options,int[] answers)的构造方法:
参数text:题干
参数options:选项
参数answers:多选标准答案(正确选项的序号)
5)在SingleChoice实现参数为(String text,String[] options,int answers)的构造方法:
参数text:题干
参数options:选项
参数answers:单选标准答案(正确选项的序号)
6)在SingleChoice和MultiChoice类中重写Question类中的check方法
方法中提供具体的检查用户答案的逻辑
根据要求,我们用代码来实现它:
定义考题类(Question)包含检测标准答案的方法 boolean check(int[] answers)和题干属性(text):
public class Question {
// 标题
private String text;
// 构造方法
public Question() {
}
public Question(String text) {
this.text = text;
}
public boolean check(int[] answers) {
return false;
}
public boolean check(int answers) {
return false;
}
// set方法
public void setText(String text) {
this.text = text;
}
// get方法
public String getText() {
return this.text;
}
}
定义单选题(SingleChoice)类继承Question类,实现参数为(String text,String[] options,int answers)的构造方法:
/**
* 单选题
*
*/
public class SingleChoice extends Question {
//选项
private String[] options;
//单选标准答案
private int answers;
//构造方法
public SingleChoice() {
}
public SingleChoice(String text,String[] options, int answers) {
super.setText(text);
this.options = options;
this.answers = answers;
}
//单选的check
@Override
public boolean check(int answers) {
if(this.answers == answers) {
return true;
}
return false;
}
//get方法
public String[] getOptions() {
return this.options;
}
public int getAnswers() {
return this.answers;
}
//set方法
public void setOptions(String[] options) {
this.options = options;
}
public void setAnswers(int answers) {
this.answers = answers;
}
}
定义多选题 (MultiChoice)类继承Question类,并实现参数为(String text,String[] options,int[] answers)的构造方法:
/**
* 多选类
*
*/
public class MultiChoice extends Question {
//选项
private String[] options;
//答案
private int[] answers;
//构造方法
public MultiChoice() {
}
public MultiChoice(String text,String[] options, int[] multiAnswers) {
super.setText(text);
this.options = options;
this.answers = multiAnswers;
}
//多选题的check
@Override
public boolean check(int[] answers) {//定义返回值为boolean类型的检查方法
System.out.println(Arrays.toString(answers));
int temp = 0;//定义一个标记
//for循环遍历数组
for(int i = 0;i < answers.length;i++) {
//判断找到的值是否为正确答案
if(answers[i] == this.answers[i]) {
//计数器加一
temp++;
}
}
//如果是正确答案,返回true
if(temp == this.answers.length) {
return true;
}//否则返回false
return false;
}
public String[] getOptions() {
return options;
}
public void setOptions(String[] options) {
this.options = options;
}
public int[] getAnswers() {
return answers;
}
public void setAnswers(int[] answers) {
this.answers = answers;
}
}
最后定义一个QuestionTest类,测试所述功能是否实现:
public class QuestionTest {
public static void main(String[] args) {
// 键盘扫面器
Scanner key = new Scanner(System.in);
// 单选题的题目,
String singleText = "(单选题)草帽大船团最厉害的人物是:";
// 单选题的选项
String[] singleOptions = { "1.娜美酱", "2.索隆", "3.路飞", "4.山治", "5.罗宾酱" };
// 单选题的答案
int singleAnswers = 3;
// 创建一个单选题的对象
SingleChoice sc = new SingleChoice(singleText, singleOptions, singleAnswers);
// 打印出题目
System.out.println(singleText);
// 打印出选项
System.out.println(
singleOptions[0] + "\t" + singleOptions[1] + "\t" + singleOptions[2] + "\t" + singleOptions[3]);
// 让用户做答
System.out.println("请作答:");
// 判断用户的答案
if (sc.check(key.nextInt())) {
System.out.println("恭喜你回答正确!");
} else {
System.out.println("很遗憾,回答错误!单选题的正确答案为:" + singleAnswers);
}
System.out.println("========================================================================================");
/*
* 创建一个多选题
*/
// 多选题的题目,定义一个多选题题干
String multiText = "(多选题)下列人物属于草帽大船团队长的是:";
// 多选题的选项,定义一个多选题选项
String[] multiOptions = { "1.雷诺", " 2.巴托洛米奥", "3.卡文迪许", "4.特拉法尔加•D•瓦铁尔•罗", " 5.鹰眼米霍克" };
// 多选题的答案
int[] multiAnswers = {123};
// 创建一个多选题对象
MultiChoice mc = new MultiChoice(multiText, multiOptions, multiAnswers);
// 打印题目
System.out.println(multiText);
// 打印选项
System.out.println(multiOptions[0] + "\t" + multiOptions[1] + "\t" + multiOptions[2] + "\t" + multiOptions[3]
+ "\t" + multiOptions[4] + "\t");
// 让用户做答
System.out.println("请作答:");
//接收用户的答案
int[] ans= new int[1];
ans[0]=key.nextInt();
// 判断用户的答案
if(ans[0]==multiAnswers[0]) {
System.out.println("恭喜你回答正确!");
}else {
System.out.println("很遗憾,回答错误!多选题的正确答案为:" + Arrays.toString(multiAnswers));
}
System.out.println("========================================================================================");
}
}
我们来看看最终效果图:
今日分享就到这儿了,希望对正在学习Java的你有所帮助!喜欢的朋友们可以私信我,咱们一起探讨Java的学习方法!