程序要求如下:
小学老师要每周给同学出300道四则运算练习题。两个运算符,100 以内的数字,不需要写答案。
需要检查答案是否正确,并且保证答案在 0..1000 之间。
本程序有Java语言实现:
点击查看代码
import java.util.*;public class Practice {private Random random = new Random();private static final int WEEKLY_QUESTIONS = 301;private static final int DAILY_QUESTIONS = WEEKLY_QUESTIONS / 7;public static void main(String[] args) {Practice quiz = new Practice();quiz.startQuiz();}public void startQuiz() {Calendar calendar = Calendar.getInstance();System.out.println("今天的日期是:" + calendar.get(Calendar.YEAR) + "年" + (calendar.get(Calendar.MONTH) + 1) + "月" + calendar.get(Calendar.DATE) + "日");System.out.println("今天需要练习的题数为:" + DAILY_QUESTIONS);int questionsToday = 0;while (questionsToday < DAILY_QUESTIONS) {String question = generateQuestion();double correctAnswer = evaluate(question);System.out.printf("题目:" + question.replace("/", "÷").replace("*", "×")+" = ");Scanner scanner = new Scanner(System.in);String userAnswer01 = scanner.nextLine();double userAnswer = parseDoubleSafely(userAnswer01 , 0.0);if (Math.abs(userAnswer - correctAnswer) < 0.001) {System.out.println("回答正确!");} else {System.out.println("回答错误,正确答案是:" + (int)correctAnswer);}questionsToday++;}System.out.println(calendar.get(Calendar.YEAR) + "年" + (calendar.get(Calendar.MONTH) + 1) + "月" + calendar.get(Calendar.DATE) + "日已经完成" + DAILY_QUESTIONS+ "道题目");}private String generateQuestion() {int a = random.nextInt(100) + 1;int b = random.nextInt(100) + 1;int c = random.nextInt(100) + 1;String[] operators = {"+", "-", "*", "/"};String op1 = operators[random.nextInt(4)];String op2 = operators[random.nextInt(4)];// 确保除法可以整除if (op1.equals("/")) {b = adjustForDivision(b);}if (op2.equals("/")) {c = adjustForDivision(c);}String question = String.format("%d %s %d %s %d", a, op1, b, op2, c);// 验证结果是否在 0-1000 之间if (evaluate(question) < 0 || evaluate(question) > 1000) {return generateQuestion(); // 重新生成}if(evaluate(question)%1!=0){return generateQuestion(); // 重新生成}return question;}private int adjustForDivision(int number) {return number == 0 ? 1 : number;}private double evaluate(String question) {String[] tokens = question.split(" ");int a = Integer.parseInt(tokens[0]);String op1 = tokens[1];int b = Integer.parseInt(tokens[2]);String op2 = tokens[3];int c = Integer.parseInt(tokens[4]);// 根据运算符优先级进行计算double result = 0;if (op1.equals("*") || op1.equals("/")) {result = applyOperation(a, b, op1);result = applyOperation(result, c, op2);} else if (op2.equals("*") || op2.equals("/")) {double temp = applyOperation(b, c, op2);result = applyOperation(a, temp, op1);} else {result = applyOperation(applyOperation(a, b, op1), c, op2);}return result;}private double applyOperation(double x, double y, String operator) {switch (operator) {case "+": return x + y;case "-": return x - y;case "*": return x * y;case "/": return x / y; // 已保证 y 不为 0}return 0;}private static double parseDoubleSafely(String str) {return parseDoubleSafely(str, Double.NaN); // 如果发生错误,返回NaN}private static double parseDoubleSafely(String str, double defaultValue) {try {return Double.parseDouble(str);} catch (NumberFormatException e) {return defaultValue;}}
}
运行结果:
每次用户使用时,会显示实时日期以便记录,随机生成一定数量的练习题,每次回答会有提示,正确或错误,回答错误时会返回正确答案。
以下是对结对编程的见解:
本次结对编程的项目,是设计一个有关小学四则运算练习题的程序,我与XXXXXXX(学号)同学共同完成。
通过本次的程序编写,有了对结对编程的以下理解:
一、好处:
1.减少错误率: 由于两个人共同审查和编写代码,可以减少bug的产生。一个人可能会忽略一些潜在的问题,而结对编程可以让另一个人及时发现并解决。
2.知识共享: 结对编程有助于团队成员之间的知识共享。每个人都能从对方的经验中学习,并且在解决问题时可以共同思考和交流想法。
3.提高代码质量: 结对编程可以促进良好的编码实践,可以编写可维护性更强、逻辑更清晰的代码。
4.增强团队合作能力: 结对编程需要团队成员之间密切合作,这有助于提高团队的协作和沟通能力。
5.即时反馈: 由于两个人一起工作,可以立即给出反馈,这有助于快速解决问题和调整方向,如在XXXXXXX(学号)编程代码的过程中,忽略了生成的随机数要小于100这个条件,我及时发现并反馈。
二、缺点:
1.不适用于所有任务: 结对编程可能不适用于所有类型的任务,例如一些独立性较强的任务可能更适合个人完成。
2.潜在的意见分歧: 在结对编程过程中,可能会出现意见分歧或者沟通不畅的情况,这可能会影响开发效率,如我和XXXXXXX(学号)对运行结果实现的意见不同,题目要求一周为界限,一周300道练习题,我的解决办法是让用户每次使用时输入自己想要的题数来练习,而XXXXXXX(学号)的解决办法是每次用户使用时随机生成小于等于300道数目的练习题。
3.可能导致疲劳: 长时间的结对编程可能会导致开发者疲劳,因为持续的集中和合作需要较高的精力。
三、体会:
1.共同成长: 结对编程是一种共同成长的过程,通过和他人合作,我学会了倾听、解释和接受不同的观点,这对我的成长很有帮助。
2.提高效率: 在结对编程中,我发现两个人共同工作可以更快地解决问题,因为我们可以同时考虑多种解决方案并及时互相提出反馈。
3.更高的代码质量: 结对编程有助于确保代码质量,因为我们在编码过程中不仅仅是编写代码,还在不断审查和改进代码,这有助于减少bug的产生。
4.挑战与成就感: 结对编程也带来了挑战,但当我们共同克服困难并成功完成任务时,也会有一种成就感和团队凝聚力的增强。