首页 > 其他分享 >结对项目

结对项目

时间:2024-03-21 20:12:30浏览次数:27  
标签:结对 String 项目 question number2 questions number1 answer

姓名: 邹嘉伟
学号: 3122004634

这个作业属于哪个课程 软件工程
这个作业要求在哪里 结对项目
这个作业的目标 完成个人项目,运用psp流程完成编程, 灵活使用测试工具和性能分析工具

项目GetHub

PSP表格

PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟)
Planning 计划 30 30
Estimate 估计这个任务需要多少时间 300 400
Development 开发 200 130
Analysis 需求分析 (包括学习新技术) 30 60
Design Spec 生成设计文档 30 30
Design Review 设计复审 10 10
Coding Standard 代码规范 (为目前的开发制定合适的规范) 10 20
Design 具体设计 60 50
Coding 具体编码 300 400
Code Review 代码复审 30 60
Test 测试(自我测试,修改代码,提交修改) 30 40
Reporting 报告 30 30
Test Repor 测试报告 60 60
Size Measurement 计算工作量 20 20
Postmortem & Process Improvement Plan 事后总结, 并提出过程改进计划 50 50
合计 1450 1320

性能分析


设计实验过程

代码运行

  1. 生成题目数和值的范围,并写进文档
点击查看代码
 public static void main(String[] args){
//        先测试10个例子看看
        int numberQuestions=10;
        int range=10;
        if(numberQuestions==0){
            System.out.println("错误:使用 -n 参数控制生成题目的个数");
            return;
        }
        if(range==0){
            System.out.println("错误:使用 -r 参数控制题目中数值(自然数、真分数和真分数分母)的范围");
//            遇到错误直接结束
            return;
        }
//        makeQuestions(numberQuestions,range);
        try {
            makeQuestions(numberQuestions,range);
        }catch (IOException e){
            System.out.println("生成题目时发生错误: "+e.getMessage());
        }

 private static void makeQuestions(int numberQuestions, int range) throws IOException{
//        创建HashSet集合,主要用来去重
        Set<String> questions=new HashSet<>();
//        创建写入文档对象
        FileWriter exercisesWriters=new FileWriter(EXERCISES_FILE);
        FileWriter answersWriters=new FileWriter(ANSWERS_FILE);
        String question;
        String answer;
        while (questions.size()<numberQuestions){
//            生成一个0-3之间的随机数,用于选择运算符
//            0:+
//            1:-
//            2:*
//            3:/
            int operation=random.nextInt(4);
//            生成两个0-range之间的随机数,用来参与运算
            int number1=random.nextInt(range);
            int number2=random.nextInt(range);
            switch (operation){
                case 0:{
                    question=number1+"+"+number2+"= ?" ;
//                    计算算数之后的值
                    answer=String.valueOf(number1+number2);
//                    判断是否重复,这就用到了HashSet集的特点,无序,不重复,无索引
                    if(!questions.equals(question)){
                        questions.add(question);
                        exercisesWriters.write(question+"\n");
                        answersWriters.write(answer+"\n");
                    }
                    break;
                }
                case 1: {
//                    结果不能出现负数,所以先判断谁大谁小,将大的赋给number1
                    if(number2>number1){
                        int temp=number1;
                        number1=number2;
                        number2=temp;
                    }
                    question=number1+"-"+number2+"= ?" ;
                    answer=String.valueOf(number1-number2);
                    if(!questions.equals(question)){
                        questions.add(question);
                        exercisesWriters.write(question+"\n");
                        answersWriters.write(answer+"\n");
                    }
                    break;
                }
                case 2: {
                    question=number1+"*"+number2+"= ?" ;
                    answer=String.valueOf(number1*number2);
                    if(!questions.equals(question)){
                        questions.add(question);
                        exercisesWriters.write(question+"\n");
                        answersWriters.write(answer+"\n");
                    }
                    break;
                }
                case 3: {
                    if(number2==0||number2==10){
                        number2=random.nextInt(range)+1;
                    }
                    question=number1+"/"+number2+"= ?" ;
                    answer=String.valueOf(number1/number2);
                    if(!questions.equals(question)){
                        questions.add(question);
                        exercisesWriters.write(question+"\n");
                        answersWriters.write(answer+"\n");
                    }
                    break;
                }
            }
        }
        exercisesWriters.close();
        answersWriters.close();

    }

  1. 生成题目中计算过程中不产生负数
点击查看代码
  结果不能出现负数,所以先判断谁大谁小,将大的赋给number1
                    if(number2>number1){
                        int temp=number1;
                        number1=number2;
                        number2=temp;
                    }
                    question=number1+"-"+number2+"= ?" ;
                    answer=String.valueOf(number1-number2);
                    if(!questions.equals(question)){
                        questions.add(question);
                        exercisesWriters.write(question+"\n");
                        answersWriters.write(answer+"\n");
                    }
                    break;
  1. 判断答案的正确与否,并写进文档
点击查看代码
 private static boolean isCorrectAnswer(String exercise, String answer) {
        String[] exercises=new String[2];
        boolean flag=false;
        for (int i=0;i<exercise.length();i++){
            if(exercise.charAt(i)=='+') {
                exercises=exercise.split("\\+");
                int num1=isNum(exercises[0]);
                int num2=isNum(exercises[1]);
                int answers= Integer.parseInt(answer);
                if(num1+num2==answers) flag=true;
                break;
            }else if(exercise.charAt(i)=='-'){
                exercises=exercise.split("-");
                int num1=isNum(exercises[0]);
                int num2=isNum(exercises[1]);
                int answers= Integer.parseInt(answer);
                if(num1-num2==answers) flag=true;
                break;
            } else if (exercise.charAt(i)=='*') {
                exercises=exercise.split("\\*");
                int num1=isNum(exercises[0]);
                int num2=isNum(exercises[1]);
                int answers= Integer.parseInt(answer);
                if(num1*num2==answers) flag=true;
                break;
            }else if(exercise.charAt(i)=='/'){
                exercises=exercise.split("/");
                int num1=isNum(exercises[0]);
                int num2=isNum(exercises[1]);
                int answers= Integer.parseInt(answer);
                if(num1/num2==answers) flag=true;
                break;
            }
        }
        return flag;
    }

    private static int  isNum(String number) {
        int num= Integer.parseInt(number);

        return num;
    }

测试运行

控制生成题目的个数,以及题目数值的范围
并将生成的题目和答案写进文档

点击查看代码
package 博客.结对项目;

import java.io.FileWriter;
import java.io.IOException;
import java.util.HashSet;
import java.util.Random;
import java.util.Set;

public class Test1 {
    //    final定义局部变量,将Exercises.txt和Answers.txt卸载最开头,则所有方法中都可以调用
//    将随机生成的函数也写在最开头
    private static final String EXERCISES_FILE="Exercises.txt";
    private static final String ANSWERS_FILE="Answers.txt";
    private static final Random random=new Random();
    public static void main(String[] args) {
//        控制生成题目的个数,以及题目数值的范围
//        并将生成的题目和答案写进文档

        //        先测试10个例子看看
        int numberQuestions=10;
        int range=10;
        if(numberQuestions==0){
            System.out.println("错误:使用 -n 参数控制生成题目的个数");
            return;
        }
        if(range==0){
            System.out.println("错误:使用 -r 参数控制题目中数值(自然数、真分数和真分数分母)的范围");
//            遇到错误直接结束
            return;
        }
//        makeQuestions(numberQuestions,range);
        try {
            makeQuestions(numberQuestions,range);
        }catch (IOException e){
            System.out.println("生成题目时发生错误: "+e.getMessage());
        }
    }

    private static void makeQuestions(int numberQuestions, int range) throws IOException{
//        创建HashSet集合,主要用来去重
        Set<String> questions=new HashSet<>();
//        创建写入文档对象
        FileWriter exercisesWriters=new FileWriter(EXERCISES_FILE);
        FileWriter answersWriters=new FileWriter(ANSWERS_FILE);
        String question;
        String answer;
        while (questions.size()<numberQuestions){
//            生成一个0-3之间的随机数,用于选择运算符
//            0:+
//            1:-
//            2:*
//            3:/
            int operation=random.nextInt(4);
//            生成两个0-range之间的随机数,用来参与运算
            int number1=random.nextInt(range);
            int number2=random.nextInt(range);
            switch (operation){
                case 0:{
                    question=number1+"+"+number2+"= ?" ;
//                    计算算数之后的值
                    answer=String.valueOf(number1+number2);
//                    判断是否重复,这就用到了HashSet集的特点,无序,不重复,无索引
                    if(!questions.equals(question)){
                        questions.add(question);
                        exercisesWriters.write(question+"\n");
                        answersWriters.write(answer+"\n");
                    }
                    break;
                }
                case 1: {
//                    结果不能出现负数,所以先判断谁大谁小,将大的赋给number1
                    if(number2>number1){
                        int temp=number1;
                        number1=number2;
                        number2=temp;
                    }
                    question=number1+"-"+number2+"= ?" ;
                    answer=String.valueOf(number1-number2);
                    if(!questions.equals(question)){
                        questions.add(question);
                        exercisesWriters.write(question+"\n");
                        answersWriters.write(answer+"\n");
                    }
                    break;
                }
                case 2: {
                    question=number1+"*"+number2+"= ?" ;
                    answer=String.valueOf(number1*number2);
                    if(!questions.equals(question)){
                        questions.add(question);
                        exercisesWriters.write(question+"\n");
                        answersWriters.write(answer+"\n");
                    }
                    break;
                }
                case 3: {
                    if(number2==0||number2==10){
                        number2=random.nextInt(range)+1;
                    }
                    question=number1+"/"+number2+"= ?" ;
                    answer=String.valueOf(number1/number2);
                    if(!questions.equals(question)){
                        questions.add(question);
                        exercisesWriters.write(question+"\n");
                        answersWriters.write(answer+"\n");
                    }
                    break;
                }
            }
        }
        exercisesWriters.close();
        answersWriters.close();

    }
}


从外部当如文件,判断对错个数

点击查看代码
package 博客.结对项目;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;

public class Test2 {
    public static void main(String[] args) {
//        从外部当如文件,判断对错个数
        //        找到文件的路径
        String exerciseFilePath="D:\\idea\\basic-code\\Exercises.txt";
        String answerFilePath="D:\\idea\\basic-code\\Answers.txt";

//        出错显示
        if(exerciseFilePath==null||answerFilePath==null){
            System.out.println("Myapp.exe -e <exercisefile>.txt -a <answerfile>.txt");
            return;
        }

//        读取题目和答案
        try {
//            调用readFile函数,读取文件,并把他们放到list集合中,方便以后调用
            List<String> exercises=readFile(exerciseFilePath);
            List<String> answers=readFile(answerFilePath);

//            判断是否正确,并统计
            List<Integer> correct=new ArrayList<>();
            List<Integer> wrong=new ArrayList<>();
//            1.逐个获取exercises,和answers
//            2.利用分割函数split,将函数分开
//            3.然后调用isCorrect,判断是否相等
            for (int i = 0; i < exercises.size(); i++) {
//                获取运算数字前面的式子,去掉等号后面
                String exercise=exercises.get(i).split("=")[0];
//                获取答案
                String answer=answers.get(i);
//                判断
                if(isCorrectAnswer(exercise,answer)){
                    correct.add(i+1);
                }else {
                    wrong.add(i+1);
                }
            }
//            将结果写入文件中
            writeGradeFile(correct,wrong);

        } catch (IOException e) {
            throw new RuntimeException(e);
        }

    }

    private static boolean isCorrectAnswer(String exercise, String answer) {
        String[] exercises=new String[2];
        boolean flag=false;
        for (int i=0;i<exercise.length();i++){
            if(exercise.charAt(i)=='+') {
                exercises=exercise.split("\\+");
                int num1=isNum(exercises[0]);
                int num2=isNum(exercises[1]);
                int answers= Integer.parseInt(answer);
                if(num1+num2==answers) flag=true;
                break;
            }else if(exercise.charAt(i)=='-'){
                exercises=exercise.split("-");
                int num1=isNum(exercises[0]);
                int num2=isNum(exercises[1]);
                int answers= Integer.parseInt(answer);
                if(num1-num2==answers) flag=true;
                break;
            } else if (exercise.charAt(i)=='*') {
                exercises=exercise.split("\\*");
                int num1=isNum(exercises[0]);
                int num2=isNum(exercises[1]);
                int answers= Integer.parseInt(answer);
                if(num1*num2==answers) flag=true;
                break;
            }else if(exercise.charAt(i)=='/'){
                exercises=exercise.split("/");
                int num1=isNum(exercises[0]);
                int num2=isNum(exercises[1]);
                int answers= Integer.parseInt(answer);
                if(num1/num2==answers) flag=true;
                break;
            }
        }
        return flag;
    }

    private static int  isNum(String number) {
        int num= Integer.parseInt(number);

        return num;
    }



    //    读入文件的重写
    private static List<String> readFile(String filePath) throws IOException {
        List<String> lines=new ArrayList<>();
        try (BufferedReader reader = new BufferedReader(new FileReader(filePath))){
            String line;
            while ((line = reader.readLine())!=null){
                lines.add(line);
            }
        }
        return lines;
    }

    private static void writeGradeFile(List<Integer> correct, List<Integer> wrong) throws IOException {
        try (PrintWriter writer = new PrintWriter("Grade.txt")) {
            writer.println("Correct: " + correct.size() + " (" + listToString(correct) + ")");
            writer.println("Wrong: " + wrong.size() + " (" + listToString(wrong) + ")");
        }
    }

    private static String listToString(List<Integer> list) {
        return String.join(", ", list.toString().replaceAll("[\\[\\]]", ""));
    }

}



项目小结

1.先生成10个例子,只实现加法
2.逐步完善,实现四则运算
3.随机生成四则运算
4.更改四则运算个数
5.写进文档
6.从外部导入文件路径,判断其中的个数
7.写算法,逐个判断文件中的算数表达式与答案
8.将判断结果写入文档
9.逐个测试

标签:结对,String,项目,question,number2,questions,number1,answer
From: https://www.cnblogs.com/ZJWagg520/p/18088146

相关文章

  • 【前端Vue】Vue3+Pinia小兔鲜电商项目第2篇:什么是pinia,1. 创建空Vue项目【附代码文档
    全套笔记资料代码移步:前往gitee仓库查看感兴趣的小伙伴可以自取哦,欢迎大家点赞转发~全套教程部分目录:部分文件图片:什么是piniaPinia是Vue的专属状态管理库,可以实现跨组件或页面共享状态,是vuex状态管理工具的替代品,和Vuex相比,具备以下优势提供更加简单的API(......
  • 数据可视化-ECharts Html项目实战
    项目实践一.会员基本信息及消费能力对比分析1.训练要点掌握堆积柱状图的绘制。掌握标准条形图的绘制。掌握瀑布图的绘制。2.需求说明 “会员信息表.xlsx”文件记录了某鲜花店销售系统上的会员信息,具体内容包括会“华面员编号、姓名、性别、年龄、城市、入会方式、会......
  • Linux服务器上部署更新/重启nuxt项目
    启动/更新/重启nuxt项目步骤1、本地电脑打包生成nuxt文件夹2、压缩nuxt文件夹后上传到服务器3、替换掉服务器上旧的nuxt文件夹..3.1、建议备份服务器上的nuxt文件夹,不做删除操作,只重命名下mvnuxtnuxt20240310//重命名nuxt文件夹为nuxt20240310..3.2、......
  • 脑洞大开丨让 AI 写代码,能做出什么样的项目?
    如今,大量程序员已经习惯在AI辅助下进行编程。据调研,AI编码工具将程序员工作效率提升50%以上。通义灵码是目前国内最受开发者喜爱的AI编码助手,可以完成补全续写代码、写单元测试、debug,根据注释生成代码等等工作。为了让更多开发者体验AI编码新玩法,通义灵码特别发布全民......
  • Xcode开发iOS运行项目报错symbol(s) not found for architecture x86_64的解决办法
    写在前边的话:如果是xcode13,那么请先升级系统到Monterey(ios12.7.4),并安装xcode14。因为好多sdk都是xcode14才有的,xcode13不支持,任你把buildsetting玩出花来都没用的。Xcode13的时候,各种报错百度搜索解决方法,各种配置buildsettings,然而没有什么用,真机/模拟器都是一一直报错。......
  • [.NET项目实战] Elsa开源工作流组件应用(三):实战演练
    目录补充需求描述需求分析代码实现下发问卷活动PublishQuestionnaireActivity通知活动:NotificationActivity等待问卷完成活动:WaitFillInSurveyActivity定时和延时活动:问卷活动:QuestionnaireActivity创建工作流开始工作流TroubleShooting补充之前的文章简单介绍了工作流和Elsa工......
  • 项目流程
     电商系统的终端访问方式-------pc端,移动app,移动web,微信小程序前后端分离的开发模式,基于ajax负责调接口 用到的技术:vue         vue-router         element-ui         axios         echart......
  • [踩坑回顾]前端项目打包编译之后,页面访问异常:exports is not defined.
    周一遇到的问题,是qiankun框架的一个vue2子项目,使用yudao开源框架二次开发。 排查:1.开发环境正常。2.项目迁移前使用的babel、package配置均未被使用过。3.考虑打包使用的命令错误。发现未按照官方教程使用npm进行编译,后端同事用pom.xml文件使用pnpm命令进行编译。 解......
  • vue项目中使用html2canvas插件
    一、生成海报图vue项目中使用html2canvas插件,实现将编写的html代码转成可以保存的图片,只需要以下四步。1、在vue项目中安装插件npmihtml2canvas 2、在需要使用到的页面引入html2canvas插件importhtml2canvasfrom“html2canvas”; 3、按照设计图编写html代码<d......
  • 《2023 IT行业项目管理调查报告》新鲜出炉!助力IT行业持续稳步发展
    又一年!2024年1月,禅道联合多方合作伙伴,发起了2023年IT行业项目管理调查问卷。经过2个多月的问卷收集与报告分析,《2023IT行业项目管理调查报告》发布啦!            我们希望通过这次调查,深入了解不同公司和个人在项目管理中面临的现状与挑战,为行业提供宝......