我提交的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;
时间: 2024-10-05 06:16:28