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@Overridepublic 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@Overridepublic 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++;}}//如果是正确答案,返回trueif(temp == this.answers.length) {return true;}//否则返回falsereturn 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的学习方法!

Java中的封装和继承思想,模拟考试阅卷系统相关推荐

  1. 万字总结,一文带你秒懂Java中的封装、继承和多态(有代码 有示例)

    Java中的封装.继承和多态 前言 一.面向对象有什么优势? 二.面向对象的三大特性! 1.封装 1.1访问限定符 1.2关于包的导入 1.2封装 2.继承 2.1继承的语法 2.2父类成员访问 3. ...

  2. java封装继承多态的理解_用最傻瓜式的方法理解Java中的封装、继承和多态

    说到java中面向对象的封装.继承和多态,很多人会说这么简单这么入门的东西一直讲干嘛,虽然是基础,但是我们要明白,所有东西都是要在基础上发展的,没有基础就去学其他的,那么你肯定是很容易失败的,那么应该 ...

  3. extend implements多个对象_「每天三分钟跟我学Java」之Java面向对象的封装、继承、多态...

    Java是面向对象的语言,深入理解面向对象的概念,对Java的开发至关重要.本节我们着重看下面向对象的三大特性,封装.继承.多态. 一.封装 封装是将类的某些信息隐藏在类内部,不允许外部程序直接访问, ...

  4. 17、Java中的面向对象的编程思想

    Java中的面向对象的编程思想 作者:韩茹 公司:程序咖(北京)科技有限公司 程序咖:IT职业技能评测平台 网址:https://www.chengxuka.com 任务 1. 面向对象 2. 面向过 ...

  5. Educoder/头歌JAVA——JAVA面向对象:封装、继承和多态

    目录 第1关:什么是封装,如何使用封装 任务描述 相关知识 什么是封装 ​编辑 封装的意义 实现Java封装的步骤 编程要求 第2关:什么是继承,怎样使用继承 相关知识 继承的基本概念 继承的特性 多 ...

  6. Java中实现接口与继承的区别

    ** Java中实现接口与继承的区别 ** 首先,先来了解一下什么是接口和继承.接口一般是使用interface来定义的.接口定义同类的定义类似,分为接口的声明和接口体,其中接口体由常量定义和方法定义 ...

  7. java继承类型的用法_详解Java中使用externds关键字继承类的用法

    理解继承是理解面向对象程序设计的关键.在Java中,通过关键字extends继承一个已有的类,被继承的类称为父类(超类,基类),新的类称为子类(派生类).在Java中不允许多继承. (1)继承 cla ...

  8. Java中接口的多继承

    我们知道Java的类只能继承一个类,但可以实现多个接口.但是你知道么?Java中的接口却可以继承多个接口.本文就来说一说Java中接口的多继承. 进入主题之前,先扩展一下.Java为什么只支持单继承呢 ...

  9. 转:Java中子类是否可以继承父类的static变量和方法而呈现多态特性

    原文地址:Java中子类是否可以继承父类的static变量和方法而呈现多态特性 静态方法 通常,在一个类中定义一个方法为static,那就是说,无需本类的对象即可调用此方法,关于static方法,声明 ...

最新文章

  1. 重磅直播|中科慧眼崔峰博士详解深度相机原理及其应用
  2. 改变状态栏的背景色和文字的颜色
  3. python SSL error: [SSL: TLSV1_ALERT_PROTOCOL_VERSION] tlsv1 alert protocol version (_ssl.c:590) 解决方法
  4. Exception经验之谈,万万没想到被很多团队采纳!
  5. mvc基础系列说谈(5)——参数与值传递,提交数据
  6. flume案例-网络数据采集-Flume的配置
  7. 又做了3个极品菜[图]
  8. LNMP-Linux下Nginx+MySQL+PHP+phpMyAdmin+eAcelerator一键安装包
  9. spark学习-73-源代码:Endpoint模型介绍(5)-Netty通讯小例子
  10. lamp mysql安全_LAMP第三部分php,mysql配置
  11. php mysql扩展 5.4_编译php5.4及安装后添加扩展
  12. 【BZOJ4710】[JSOI2011]分特产(容斥)
  13. 电商网站商品图片放大镜实现
  14. Matter-JS Composites 混合材料 · 上
  15. go 对象json转map
  16. 实习(光条中心提取,灰度重心法)
  17. Python读取视频方法
  18. 深度学习优化策略---权重、权重初始化与权重衰减
  19. 色散原理中涉及到的物理概念 折射率 波数 相速度 传播常数
  20. Excel怎么快速删除隐藏区域

热门文章

  1. 鸿钧老祖 数据结构笔记01:编程面试过程中常见的10大算法(java)
  2. Java基础知识学习:简单随手记录(3)
  3. 惊喜开学季,教你如何在人工智能时代站稳脚跟!
  4. 微信生态中关注、点击等各种微信消息处理的后端服务实现WxMpMessageRouter
  5. 意派epub360 html 代码,意派Epub360丨怎么制作在线知识答题H5?一起来学经验!
  6. windows计算机没有网络适配器,Win10 1909专业版中没有网络适配器解决方法
  7. STM32嵌入式基础开发附C-STM32-CAN通讯
  8. 在Xubuntu 22.04安装中文输入法
  9. Word如何快速插入日期和时间
  10. 6种肤色检测方法的原理及实现(C++)