结对编程——小学四则运算练习题小程序
程序要求如下:
小学老师要每周给同学出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;
}
}
}
运行结果:
每次用户使用时,会显示实时日期以便记录,随机生成一定数量的练习题,每次回答会有提示,正确或错误,回答错误时会返回正确答案。
以下是对结对编程的见解:
本次结对编程的项目,是设计一个有关小学四则运算练习题的程序,我与2252229(学号)同学共同完成。
通过本次的程序编写,有了对结对编程的以下理解:
一、好处:
1.减少错误率: 由于两个人共同审查和编写代码,可以减少bug的产生。一个人可能会忽略一些潜在的问题,而结对编程可以让另一个人及时发现并解决。
2.知识共享: 结对编程有助于团队成员之间的知识共享。每个人都能从对方的经验中学习,并且在解决问题时可以共同思考和交流想法。
3.提高代码质量: 结对编程可以促进良好的编码实践,可以编写可维护性更强、逻辑更清晰的代码。
4.增强团队合作能力: 结对编程需要团队成员之间密切合作,这有助于提高团队的协作和沟通能力。
5.即时反馈: 由于两个人一起工作,可以立即给出反馈,这有助于快速解决问题和调整方向,如在2252229(学号)编程代码的过程中,忽略了生成的随机数要小于100这个条件,我及时发现并反馈。
二、缺点:
1.不适用于所有任务: 结对编程可能不适用于所有类型的任务,例如一些独立性较强的任务可能更适合个人完成。
2.潜在的意见分歧: 在结对编程过程中,可能会出现意见分歧或者沟通不畅的情况,这可能会影响开发效率,如我和2252229(学号)对运行结果实现的意见不同,题目要求一周为界限,一周300道练习题,我的解决办法是让用户每次使用时输入自己想要的题数来练习,而2252229(学号)的解决办法是每次用户使用时随机生成小于等于300道数目的练习题。
3.可能导致疲劳: 长时间的结对编程可能会导致开发者疲劳,因为持续的集中和合作需要较高的精力。
三、体会:
1.共同成长: 结对编程是一种共同成长的过程,通过和他人合作,我学会了倾听、解释和接受不同的观点,这对我的成长很有帮助。
2.提高效率: 在结对编程中,我发现两个人共同工作可以更快地解决问题,因为我们可以同时考虑多种解决方案并及时互相提出反馈。
3.更高的代码质量: 结对编程有助于确保代码质量,因为我们在编码过程中不仅仅是编写代码,还在不断审查和改进代码,这有助于减少bug的产生。
4.挑战与成就感: 结对编程也带来了挑战,但当我们共同克服困难并成功完成任务时,也会有一种成就感和团队凝聚力的增强。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具