标签:
需求分析:
该类软件受众群体主要是小学知识水平的小孩子,所以这里的运算难度也需要保持在小学水平,一共做了加减乘除四则运算。
然而,在减法中出现减数比被减数大的情况(小学水平)和在除法中出现被除数为零的情况都是不允许的,这在逻辑上是有错误的,所以在接下来的程序代码中,我们也成功的把这类错误解决掉了。
具体设计思路:
这里我们延续了上一次的代码设计,并且对一些需要反复多次用到的代码进行了封装,可以说是进行了一次优化,这次我们多次用到了方法,主要是希望将代码进行模块化,虽然效果看起来并不是太好。
代码实现:
import java.util.Random;
import java.util.Scanner;
public class Copy
/*
* 复制的源代码,所以直接把类名叫Copy了。 修改较大,将一些常用的封装成了方法,这一点是受到了张欣同学代码的提示。
* 至于增量是用的我的代码,因为我的代码早先已经实现了几个要求。 感觉比较省事些。
* 老师要求的那个让用户自己选择随机数生成的范围,我们并没有做,原因是我们用的命令行界面,选来选去已经很繁琐了,所以我们决定并没有写。希望老师理解。
*/
{
public int answer = 0;
private static int mistake = 0;
private static int correct = 0;
private static int select;
private int num;
private Random random;
public static void main(String[] args)
{
// 调用计算器方法。
Copy copy = new Copy();
copy.calculator();
}
private int inPut()
{
/*
* 创建input方法,用来接收并检测用户输入的数据
*
*/
while (true)
{
try
{
Scanner scanner = new Scanner(System.in);
answer = scanner.nextInt();
break;
}
catch (Exception e)
{
System.out.println("請輸入一個整數。");
}
}
return answer;
}
public void calculator()
{
Copy copy = new Copy();
Scanner scanner = new Scanner(System.in);
random = new Random();
System.out.print("请输入你想出的题目数量:");
num = scanner.nextInt();
System.out.println("请输入你想要的运算符.0 加,1 减,2 乘,3 除.4,随机 ");
select = scanner.nextInt();
System.out.println("请输入你规定的时间,以分钟为单位。");
long longTime = System.currentTimeMillis() + scanner.nextInt() * 10000;
new Thread()
{
/*
* 启用一个子线程,用来实现倒计时效果,不过我们两个并没有找到在煮程序已经运行完的时候把子线程关闭的方法,这里有一个BUG。
*
*/
public void run()
{
while (true)
{
long l = System.currentTimeMillis();
if (l == longTime)
{
System.out.println("时间到!!");
copy.score();
copy.exit(0);
}
else
{
continue;
}
}
}
}.start();
for (int i = 0; i < num; i++)
// 用for循环来设置出题数量,既用户输入的num值。
{
//调用出题方法。
Switch(select);
}
score();
}
public void score()
{
/*
* 统计得分方法,用来判断用户输入的结果是否正确 以及是否有没做的。
*/
System.out.println("你一共作对" + correct + "道。");
System.out.println("你一共作错" + mistake + "道。");
if ((num - (mistake + correct)) != 0)
{
System.out.println("你一共作对了" + correct + "道,错了" + mistake + "道,没做" + (num - (mistake + correct)) + "道。");
}
else if (mistake == 0 && correct != 0)
{
System.out.print("你太聪明了!!^.^");
}
else if (correct > mistake)
{
System.out.print("再接再厉!^.^");
}
else if (correct > mistake)
{
System.out.print("再接再厉!^.^");
}
else if (mistake > correct)
{
System.out.print("不要灰心,再来一次吧。");
}
else if (mistake == 0 && correct == 0)
{
System.out.print("同学,你没做题哦!");
}
System.exit(0);
}
public void Switch(int select)
{
int x = random.nextInt(11);
int y = random.nextInt(11);
if (select == 4)
{
/*
* 这里设置if语句,用来判断用户是否选择了随机模式。
*
*/
select = random.nextInt(4);
}
switch (select)
// 根据用户选择的运算符号进行出题。
{
case 0:
System.out.println("请输入 " + x + "+" + y + " 的正确答案:");
answer = inPut();
if (answer != (x + y))
// 用来判断用户输入的答案是否与正确答案相符合,是,正确+1,否,错误+1.
{
mistake++;
}
else
{
correct++;
}
break;
case 1:
if (x < y)
{
System.out.print("请输入 " + y + "-" + x + " 的正确答案:");
answer = inPut();
if (answer != (y - x))
{
mistake++;
}
else
{
correct++;
}
break;
}
System.out.println("请输入 " + x + "-" + y + " 的正确答案:");
answer = inPut();
if (answer != (x - y))
{
mistake++;
}
else
{
correct++;
}
break;
case 2:
System.out.println("请输入 " + x + "*" + y + " 的正确答案:");
answer = inPut();
if (answer != (x * y))
{
mistake++;
}
else
{
correct++;
}
break;
case 3:
if (x == 0)
// 因为被除数不能为0,所以当被除数为0时,在这里进行掉转,让0为除数。
{
System.out.println("请输入 " + y + "/" + x + " 的正确答案:");
answer = inPut();
}
System.out.println("请输入 " + x + "/" + y + " 的正确答案:");
answer = inPut();
if (answer != (x / y))
{
mistake++;
}
else if (answer != 0)
{
mistake++;
}
else
{
correct++;
}
break;
}
}
public void exit(int x)
{
/*
* 创建退出方法,被子线程调用。
*
*/
System.exit(x);
}
}
测试:
PSP 耗时分析:
需求分析0.5h
设计思路1h
具体实现0.5h
测试0.05h
总结:
通过这次结对编程,我发现和同伴在一起编程,也是一件非常愉快的事情。代码总体效果还行,就是线程那儿,略有不足。
因为没有机器,所以作业方面有时候并不能及时交上,希望老师理解。
标签:
原文地址:http://www.cnblogs.com/li999999999/p/4906687.html