前言
太长时间没写博客了,其实这期间学了很多东西,但都是在记笔记没发过博客,这次借着学校的作业学了个新东西javaFx,比swing界面好看很多也方便很多,所以根据这个小项目准备写一篇博客,记录一下初学的javaFx,因为只学了四天,掌握的只是皮毛,所以如果有什么不妥的地方欢迎指正!
项目介绍
要求:java编写小程序,完成随机生成50道一百以内的不重复的加减法,可能需要输出混合运算。
思路:首先要编写习题类,用于生成简单的两个数运算习题;再编写混合运算类继承习题类,用于生成混合的加减法运算习题;由于需要图形界面输出,所以两个类都需要编写打印方法用于打印出习题。
之后需要编写一个总的类,相当于习题本,包含一个习题数组的属性,这个习题数组既包含简单运算也包含混合运算(混合运算继承于简单运算),在这个类的构造函数中完成对习题的初始化,初始化的过程中检查重复性,由于生成是随机的,所以有几率习题会出现重复的情况,可以在出现重复的时候,在当前位置上重新生成习题。
在编写GUI的时候选择了javaFx,因为就算是缺省的基本工具样式也很好看,用起来也方便。主要分有四个Pane,一个是根节点Pane,做下面三个Pane的父节点;两个页面Pane,第一页和第二页;一个最右边的输出成绩和页面showPane。
在功能方面需要完成:
- 分页打印习题,可以上下翻页;
- 输入框内只能输入数字,输入字符提示错误;
- 摁下提交按钮后打印成绩和错题集,方便订正;
- 可以多次提交成绩分别打印错题
- 加入倒计时功能,督促学生在一定时间内完成习题。
代码
Exercise类:
public class Exercise {
private int left;
private int right;
private char operate;
private int result;
private Random random = new Random();
public Exercise(){
left = random.nextInt(101);
right = random.nextInt(101);
if(random.nextInt(2) == 0){
operate = '+';
result = left + right;
}else {
operate = '-';
result = left - right;
}
}
public String print(){
return (left+" "+operate+" "+right+ " = ");
}
public int getLeft() {
return left;
}
public int getRight() {
return right;
}
public char getOperate() {
return operate;
}
public String getResult() {
String res = Integer.toString(result);
return res;
}
}
mixExercise类:
public class mixExercise extends Exercise {
//随机数个混合运算,混合运算包含的数字在(3,5)之间
private Random random = new Random();
private int size;
private ArrayList<Integer> numList;
private ArrayList<Character> opList;
private int result;
public mixExercise(){
size = random.nextInt(3) + 3;
numList = new ArrayList<>(size);
opList = new ArrayList<>(size - 1);
for(int i = 0; i < size - 1; i++){
numList.add(random.nextInt(101));
if(random.nextInt(2) == 0)opList.add('+');
else opList.add('-');
}
numList.add(random.nextInt(101));
result = numList.get(0);
for(int i = 0; i < opList.size(); i++){
if(opList.get(i) == '+'){
result += numList.get(i + 1);
}else {
result -= numList.get(i + 1);
}
}
}
public String print(){
String display = "";
for(int i = 0; i < opList.size(); i++){
display += numList.get(i);
display += " " + opList.get(i) + " ";
}
display += numList.get(size - 1);
return display + " = ";
}
@Override
public String getResult() {
String res = Integer.toString(result);
return res;
}
}
Operation类:
public class Operation {
public ArrayList<Exercise> exercises;
public Operation(int num_MixExercise){
exercises = new ArrayList<>(50);
for(int i = 0; i <= 50 - num_MixExercise;){
Exercise exercise = new Exercise();
if(!checkTheRepeat(exercise)){
exercises.add(exercise);
i++;