第二次作业熟悉使用工具
GIT地址 | 我的GIT地址 |
---|---|
GIT用户名 | peaceANDlove |
学号后五位 | 61417 |
我的博客地址 | 点这里 |
作业链接 | 链接地址 |
Part1.配置基本环境
本来是打算用c++的,但是学的不太到位,各种语法基础还不熟练,就换成了java,虽然java学的也不算到位,但是毕竟也用过一段时间了,语法和一些基本的方法比较c++还是要熟悉一些。
基本过程
java环境配置推荐:java环境变量配置
Part2.阿超四则运算分析与编码过程
分析过程:
题目:
阿超家里的孩子上小学一年级了,这个暑假老师给家长们布置了一个作业:家长每天要给孩子出一些合理的,但要有些难度的四则运算题目,并且家长要对孩子的作业打分记录。作为程序员的阿超心想,既然每天都需要出题,那何不做一个可以自动生成小学四则运算题目与解决题目的命令行 “软件”呢。他把老师的话翻译一下,就形成了这个软件的需求:
- 程序接收一个命令行参数 n,然后随机产生 n 道加减乘除(分别使用符号+-*/来表示)练习题,每个数字在 0 和 100 之间,运算符在 2 个 到 3 个之间。
- 由于阿超的孩子才上一年级,并不知道分数。所以软件所出的练习题在运算过程中不得出现非整数,比如不能出现 3÷5+2=2.6 这样的算式。
- 练习题生成好后,将生成的 n 道练习题及其对应的正确答案输出到一个文件 subject.txt 中。
- 当程序接收的参数为4时,以下为一个输出文件示例。
13+17-1=29
11*15-5=160
3+10+4-16=1
15÷5+3-2=4
分析:
由用面向对象的思维来分析题目的需求可以知道,我一共需要创建两个类;
1.创建一个用于创建四则运算计算式的类
2.创建一个用于计算计算式结果的类
需要注意的地方有;
1.每次产生的运算符在2~3个之间
2.计算式的数字在0到100之间
3.练习题在运算过程中不得出现非整数
比较难的地方;
需要用到逆波兰算法将计算式中的中缀表达式转换成后缀表达式,之后再用栈来计算后缀表达式的结果,期间还要控制计算的结果不能出现非整数。
编码过程:
经过一段时间的思考后,发现我想要单独的把这个四则运算程序写出来有些困难,以我现在的能力还有些欠缺,于是我就从网上查找相关的资料,发现了两个和我的想法比较接近的博客,所以下面的代码实在以下两篇博客的基础上进行了一些修改,不知道算不算是抄袭呢。
参考资料1:https://blog.csdn.net/cimixian/article/details/88853883
参考资料2:https://coding.net/u/wanghz499/p/2016012032week2-2/git/tree/master/src
1.用于创建计算式的方法
public String createCalculation(){ //用于产生计算式的类,并把计算式封装成一个String类型的数据进行处理
Random random = new Random();
String[] operator = {"+","-","*","÷"};
int operatorCount=2+random.nextInt(2); //产生的操作符的个数2~3个
int num[] = new int[operatorCount+1]; //产生的操作数字的个数应当比操作符多一个
int[] operatorIndex = indexs(operatorCount, 4);
String s = new String();
for(int j=0;j<=operatorCount;j++){
num[j] = random.nextInt(101); //用于产生0~100范围内的整数
}
switch(operatorCount){ //这里是将计算式的格式给固定下来,以特定的格式进行创建计算式
case 2: { //表示计算式里面只有两个运算符
s = num[0] + operator[operatorIndex[0]] + num[1] +
operator[operatorIndex[1]] + num[2] ;
break;
}
case 3:{ //表示计算式里面有三个运算符
s=num[0]+operator[operatorIndex[0]]+num[1]+
operator[operatorIndex[1]]+num[2]+
operator[operatorIndex[2]]+num[3];
}
}
s+="=";//给计算式加上等号
Calculate calculate = new Calculate();
int answer = calculate.count(s); //计算计算式的答案
if(answer>=0){
s+=answer;
}else{
return createCalculation(); //不符合条件的就重新创建计算式
}
return s;
}
用于计算结果的代码以及部分工具代码我都是参考之前的两分参考资料里面的,在这里就不展示了。
主方法代码
public class Main {
public static void main(String[] args) {
File file = new File("../result.txt");
try (Writer out = new FileWriter(file)) {
System.out.println("输入需要创建的题目数");
Scanner sc = new Scanner(System.in);
int count = sc.nextInt();
CreateCalculation calculation = new CreateCalculation();
for (int i = 0; i < count; i++) {
String s = calculation.createCalculation();
System.out.println(s);
out.write(s);
out.write("\r\n");
}
out.close();
System.out.println("创建成功!");
}catch (IOException e){
e.printStackTrace();
System.out.println("创建失败");
}
}
}
Part3.Git使用流程
由于之前使用过git的基本操作,所以我是安装过git的,这里就不演示安装git教程。
推荐GIT安装使用教程:https://www.liaoxuefeng.com/wiki/896043488029600/896067074338496
我在这里演示使用git从github仓库中克隆项目过程
根据图示复制URL
在电脑本地选择合适的目录,安装好git后,在选定的文件夹中点击鼠标右键 git Base here
出现上面窗口后输入 git clone ,在输入之前复制的URL
这样,本地就会有对应的文件目录,再创建一个与自己github同名的文件夹就大功告成了。
接下来就是将之前写的代码推送到自己的仓库中了,当你用idea把项目文件建立在从github上克隆下来的文件夹后,idea软件会有push和pull的功能。
点击红色箭头所指的地方就可以提交到仓库中了。
然后登陆自己的github账号发现我所写的代码已经提交上去了。
Part4.单元测试
idea软件已经集成用于测试的组件Junit,所以只需对对应的单元创建测试类即可。
基本调试:
编写完代码后,我进行测试,一开始发现控制台打印的结果和我预期的想法相差甚远。
算出的结果总是等于最后一个计算数字,于是我想可以通过加断点的方式来看看问题出现在哪里
点击debug按钮后,我就可以在控制台观察变量的值,并判断出那些变量的值出现了异常
当调试到这个这个方法时,我发现for循环运行的次数和我预计的次数不同,仔细观察后发现,控制循环的变量i,i++了两次
Part5.做项目时自生的问题
1.本次项目遇到的最大的问题就是编码过程,虽然有一个基本的思路,但是不知道如何去实现,最后通过百度的方式一边读别人的代码,一边完善自己的项目,才完成了此次作业。
2.数据结构知识的欠缺,一看到需要计算四则运算,我就知道需要用到栈来实现相应的操作,但是实际操作起来,非常生硬,还容易出错,这是我今后需要加强的部分。
3.思考的欠缺,此次代码是在他人的基础上进行修改的,总的来说我只是在学习他人的思维,被他人引导着,缺乏自己独立的想法,虽然在原有的代码上进行一些修改,但是主要思路还是参照的他人的,这一方面也是需要在好好加强的。
Part6.项目小结
通过本次小项目的整个流程,发现了自己的不足,尤其欠缺的是将需求分析转换成代码这个过程,一开始我是分析出来应该有哪些类,但是却不知到该如何用编码的方式去实现,其次是一些数据结构与算法的基础知识掌握的不够牢靠,所以用起来的时候往往是完成了这一步,不知道下一步该做些什么,总得来说就是代码量太少了,基础的知识掌握的也不够熟练,接下来的学习过程会重点强化这两个方面。本次项目收获十分大,发现了自己的不足,也学会了使用git和github来管理自己的代码。