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]+"\t");
}
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); 语句出错
明天计划
复习、练习四五章内容。