课堂测试1:像二柱子那样,花二十分钟写一个能自动生成30道小学四则运算题目的”软件“
课堂测试2:(1)题目避免重复
(2)可定制(数量/打印方式:输入大的数量值,测试一下系统是否崩溃,反向查找系统是否优化的余地;
3:定制操作数的个数:
4:定制是否有乘除法
5:定制是否有括号(随机加入)
6:定制数值范围(确定操作数的取值范围)
在这次实现二柱子四则运算的题目途中,我也碰到了几个问题:
(1)在开始写的时候只想着通过之前写的去提升,但是实际上不通过大动筋骨真的没法去完成这一项任务。由此可见,不能拘泥于之前写的那点东西,拿到新的任务为之后一定要先分析需求,然后去规划出不同的类,在类中构想出大概的方法和实现方式,一定不要边写边想,那样写到一半肯定会后悔的。
(2)在写到一半的时候,我没有把这些子方法放到ClassTest2类中,而是和主方法一样放在ClassTest里,这就导致了我在面临错题重做阶段的问题时,我设置的关于错题题目以及对应答案的数组arrTest和arrAnswer都不能成功地得到其已经在其他字方法中获得的值,而是只能维持初始化时的空值。
· 我认为其中的原因是:我在主方法中使用这些数组的时候都需要通过实例化对象的方法去做,而当我实例化对象之后得到的是一个新对象,并不会直接得到我通过子方法获得的值,也就导致了这种情况。
解决的方法也很简单:那就是把除了子方法之外所有的方法和属性都移植到ClassTest2类中,并定义新方法去完成上述操作,让它去当一个纯纯的工具人!有了工具人之后,ClassTest类中的主方法就可以直接通过调用ClassTest2中的方法实现想到达成的目标, 非~常~好用。
package pers.yan.classTest;
import java.util.Random;
import java.util.Scanner;
import pers.yan.classTest2.ClassTest2;
public class ClassTest
{
Scanner sc = new Scanner(System.in);
public static void main(String[] args)
{
ClassTest2 B = new ClassTest2();
boolean bexit = true;
while(bexit)
{
ClassTest A = new ClassTest();
B.enterMenu();
Scanner sc = new Scanner(System.in);
int iSure = sc.nextInt();
if(iSure == 1)
{
System.out.println(“—————开始练习—————–“);
System.out.println(“请输入生成四则运算题目的个数:”);
int iControl = sc.nextInt(); //iControl用于控制生成题目总数
System.out.println(“请输入操作数的个数:”);
int iControl2 = sc.nextInt(); //iControl2用于控制生成操作数的个数
System.out.println(“请输入操作数的生成范围:”);
int iField = sc.nextInt(); //iField用于控制操作数的生成范围
System.out.println(“请输入是否有乘除法(有:1;没有:0)”);
int iWay = sc.nextInt(); //iWay用于控制是否有乘除法
if(iControl < 1 || iControl2 < 2 || iField < 0 || (iWay != 1 && iWay != 0))
{
System.out.println(“输入错误,请重新输入!”);
return;
}
else
{
B.show(iControl,iWay,iControl2,iField);
}
}
else if(iSure == 2)
{
B.reTest();
}
else
{
System.out.println(“已退出!”);
bexit = false;
}
}
}
}
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/288781.html