zoukankan      html  css  js  c++  java
  • JAVA学习日记12-0717

    今天学了什么

    对第五章综合实例进行了实验和学习。

    问题类:

    /**选择题*/
    public class Question {
    /**题干*/
    String text;
    /**选项*/
    String[] options;
    /**打印当前题目*/
    public void print (/*Question this*/){
    //this实际引用的是子类实例
    System.out. println(this.text);
    for(int i=0; i<this.options. length; i++) {
    System.out.print (options[i]+" ");
    }
    System.out.println();
    }
    /**检查答案,answers 代表用户填写的答案
    *这个方法不能确定具体的检查答案的逻辑
    *需要由具体型覆盖方法*/
    public boolean check (char[] answers) {
    return false;//这个false表示用户答案是错误的,应该
    //由子类型提供具体的检查答案的方法(叫"方法的覆盖" )
    }
    }

    单选类:

    /*本单选题继承于选择题,单选题会继承选择题的属性和方法*/
    public class SingleQuestion extends Question{
    /**唯一的单选标准答案*/
    char answer;
    /**构建一个单选题实例(对象),依赖:题干,选项和一个标准答案*/
    public SingleQuestion (String text,String[] options, char answer) {
    this.text = text;
    this. options = options;
    this.answer = answer;
    }
    /**覆盖(重写,是修改)父类型的方法,提供具体的检查答案的过程*/
    public boolean check (char[] answers) {
    if (answers==null || answers.length != 1)
    return false;
    return this.answer == answers[0] ;
    }
    }

    多选类:

    import java.util.Arrays;
    /**多项选择题,继承表示"是"的关系:多选题是选择题*/
    public class MultiQuestion extends Question {
    /**对选题标准答案*/
    char[] answers;
    public MultiQuestion(String text,String[] options, char[] answers ) {
    this.text = text;
    this.options = options;
    this.answers = answers;
    }
    /**覆盖检查答案的方法,实现多选题的具体检查用户答案逻辑*/
    public boolean check (char[] answers) {
    //answers代表用户答案,this.answers 代表标准答案
    return Arrays.equals(answers,this.answers);
    }
    }

    试卷类:

    import java.util.Scanner;

    public class PaperDemo {
    public static void main(String[] args) {
    //paper考卷,考卷是选择题的集合(数组)
    Question[] paper = {null,null};//new Question[2];
    paper [0]=new SingleQuestion ("如何买火车票靠谱?",
    new String[]{"A.电话","B.网上", "C.黄牛","D.画的"},
    'A');
    paper[1]=new MultiQuestion ("哪几位是歌手?",
    new String[]{"A.刘德华","B.张学友","C.郭富城","D. 孙悟空"},
    new char[]{'A','B','C'});
    Scanner console=new Scanner(System.in) ;
    for(int i=0; i<paper.length; i++){
    Question q = paper[i];
    q.print();//打印试题
    System.out.print("请选择:");
    String str = console.nextLine();//等待用户答案
    char[] answers = str.toCharArray() ;//转换答案为数组
    //方法是动态绑定到对象,有具体对象决定执行哪个方法
    if(q.check(answers)) {//检查用户答案
    System.out.println("给力呀!") ;
    }
    else {
    System.out.println("亲,要努力呀!");
    }
    }
    }
    }

    运行截图:

    遇到的问题

    回答多选题时报错

    原因时多选类中 return Arrays.equals(answers,this.answers); 语句出错

    明天计划

    复习、练习四五章内容。

  • 相关阅读:
    Finding Palindromes POJ
    吉哥系列故事——完美队形II HDU
    Period II FZU
    生日礼物&&Supermarket
    炮兵阵地[状态压缩DP]
    最小表示法 P1368
    Period
    最长异或路径
    Luogu P5490 扫描线
    解方程
  • 原文地址:https://www.cnblogs.com/a8047/p/13332257.html
Copyright © 2011-2022 走看看