首页 > 代码库 > 任务03——简单程序测试及 GitHub Issues 的使用

任务03——简单程序测试及 GitHub Issues 的使用

我提交的Issue

技术分享

对方提交给我的Issue

技术分享

  对于对方提出的问题,我的理解是当程序接收到非法字符时才会重新输入,对于正常的输入(都由数字组成)如果是错误的,自然是直接生成新题目,毕竟最后还要给出正确率。

  在修改自己的程序时,主要的困难就是第4个问题(如果用户输入除数字及 / 之外的其他字符(含空格、小数点等),程序是否会拒绝输入?)和第7个问题(程序是否能避免生成已经生成过的算式(包含对于加法运算来说,A+B 与 B+A 的也属于重复算式)?)。

  对于第4个问题,我是这么解决的:对于正确答案来说,除了数字以外最多只有一个“/”和一个“-”,所以我就用replaceFirst把第一次出现的“/”或者“-”去掉,如果后面还有“/”和“-”肯定就是错啦。当然这样也能判断出其他非法字符。

public static boolean isNumeric(String str) {         //判断输入字符是否合法
Pattern pattern = Pattern.compile("^[0-9]*$");
if (str.contains("/") && str.contains("-")) {
str = str.replaceFirst("/", "");
str = str.replaceFirst("-", "");
} else if (str.contains("/")) {
str = str.replaceFirst("/", "");
} else if (str.contains("-")) {
str = str.replaceFirst("-", "");
}
return pattern.matcher(str).matches();
}
  对于第七个问题,因为A+B与B+A也属于重复算式,所以有了下面的now和now1,用来记录当前随机生成的数字a和b。now和now1与记录每一次生成结果的数组record[]作比较,如果record已经记录过,则需要重新生成。
String now = "" + a + b;     //避免生成相同算式
String now1 = "" + b + a;
for (int j = 0; j < i; j++) {
while (record[j].equals(now) || record[j].equals(now1)) {
a = r.nextInt(10);
b = r.nextInt(9) + 1;
while (a == b || a > b) { //这里的a>b是为了生成真分数,不写也可以
a = r.nextInt(10);
b = r.nextInt(9) + 1;
}
now = "" + a + b;
now1 = "" + b + a;
j = 0;
}
}
record[i] = now;

任务03——简单程序测试及 GitHub Issues 的使用