腾讯云:https://dev.tencent.com/u/Sophiamuma/p/CalculateProject/git
GitHub:
https://github.com/SophiaMuma/progect-calculate
基本功能:
扩展功能:
在我的src中,我建立了Main类,和main包,包中有四个类。
功能: 是该程序运行的入口,包含 public static void main(String[] args) 方法。该方法可接收一个生成运算式数目n,并且调用intNumber(int num)方法对输入数据n的合法性进行判断并作出响应,不合法调用input()函数,提示用户重新输入。然后调用Outer()方法来实现运算式的生成输出。
public static void main(String[] args) {
try {
times = Integer.valueOf(args[0]);//字符串为整型变量
times = intNumber(times);//用intNumber判断数的范围
}catch (Exception e){
System.out.println("请输入一个1~100的数字。");
times = inPut();
}
//异常处理,如果输入不符合整型和intNumber对数范围的规定,就catch错误,输出提示并调用inPut()重新输入
Outer outer = new Outer(times);//输出调用
}
运用递归重复判断输入数的合法性。
private static int inPut(){
try {
Scanner input = new Scanner(System.in);//获取输入数
times = input.nextInt();//控制台输入说赋给times
times = intNumber(times);
}catch (Exception e){
System.out.println("输入格式不正确,请输入一个1~100的数字。");
inPut();
}//异常处理,用于判断输入是否处于1~100,如果还不符合再调用自己
return times;
}
判断合法性的方法。
private static int intNumber(int num){
if(num >= 1&&num <=100){
return num;
}//判断输入数是否符合要求的方法
else {
throw new RuntimeException();//异常处理,抛出运行时异常
}
}
功能: 用于产生运算题目,并调用Tester类的对象对题目进行测试。
题目产生方法。
void makeQuestion(){
this.question.setNums((int)((Math.random()*3)+2));
this.question.setNumber(numMaker.makeNumber(question.getNums()));
this.question.setChars(charMaker.makeChar(question.getNums()));
}
随机制造数字的方法。
lass NumMaker{
int[] makeNumber(int nums){
int[] number = new int[nums+1];
for(int i = 0;i < nums+1;i++){
number[i] = (int)(Math.random()*99);
}
return number;
}
}
随机制造运算符的方法。
class CharMaker{
private char[] box = {'+','-','*','÷'};
char[] makeChar(int nums){
char[] chars = new char[nums];
for(int i = 0;i < nums;i++){
chars[i] = box[(int)(Math.random()*4)];
}
return chars;
}
功能: Tester类对产生数及符号进行运算。
判断优先级,实现先乘除后加减。
private int getResult(Box box){
//用于判断优先级的部分
if(box.listC.indexOf('*')>box.listC.indexOf('÷'))
box = function(new Multiplication(),box);
else if(!(box.listC.indexOf('÷')==(-1)))
box = function(new Division(),box);
else if(box.listC.get(0) == '+')
box = function(new Plus(),box);
else if(box.listC.get(0) == '-'){
box = function(new Subtraction(),box);
}
//实现递归的部分
if(box.listC.isEmpty()){
if(box.listN.get(0)==-1)
questionTest.setUseful(false);
return box.listN.get(0);
}
else {
return getResult(box);
}
}
其他的不做过多展示了。
功能: 完成输出内容
public Outer(int times){
this.times = times;
this.boxs = new String[times+1];
boxs[0] = ID;
for (int i = 1;i <= times;){
maker.makeQuestion();
maker.testQuestion();
if(!maker.getQuestion().isUseful())
continue;
String box = maker.getQuestion().toString();
boxs[i] = box;
i++;
}
outQuestion(boxs);
}
功能: get、set方法用于修改获取。
git config --global user.email "[email protected]"
git config --global user.name “Sophiamuma”
git remote remove origin
git init
git remote add origin https://git.dev.tencent.com/Sophiamuma/CalculateProject.git
git add src
git add result.txt
git commit -m’你的注释’
git push -u origin master
PSP | 任务内容 | 计划时长(h) | 实际时长(h) |
---|---|---|---|
Planning | 计划 | 1 | 3 |
·Estimate | 估计时长,规划大致任务步骤 | 2 | 3 |
Development | 开发 | 28 | 60 |
·Analysis | 需求分析(包括新技术学习) | 3 | 5 |
·Coding Standard | 代码规范(为目前的开发制定合适的规范) | 0 | 0 |
·Design | 具体设计 | 2 | 4 |
·Coding | 具体编码 | 20 | 42 |
·Code Review | 代码复审 | 1 | 3 |
·Test | 测试(自我测试,修改代码,提交修改) | 2 | 6 |
Reporting | 报告 | 6 | 7 |
·Size Measurement | 计算工作量 | 2 | 1 |
·Postmortem & Process Improvement Plan | 事后总结,并提出过程改进计划 | 2 | 2 |
写博客 | 2 | 4 |
这个作业对于我来说难度挺大的,遇到的问题也特别多,以前在学习语言的时候只会书本知识,实践太少,一个完整的项目更是没有独立完成过。
起初我不知道要怎么实现,只是初步想了几个分块就动手了,一个主函数就花了挺多时间,判断段输入合法性什么的弄好了,我就写了生成随机数和符号的函数,但是完全不知道要怎么联合,大脑一片空白,那就学习呗,我看了很多博客,大概有了想法,但是代码基础太过薄弱,有些代码读懂都困难,更不用说自己写了,于是我借鉴了很多学长学姐的方法,基本上是现学现做,整个基础功能就花了好几天空闲,然后,单纯的整合再学会是不行的,会有很多bug一堆,于是我又调试了很久。编辑器的怎样建本地仓库、cmd怎样运行生成txt、git上传coding.net也是从网上现学的。
虽然这次实践作业我完成的并不好,但是真的让我提升了很多,我发现人的自学吸收能力是很强的,只要再多花些时间动手实践,我的代码能力一定能有所提升。通过本次作业,我对一个完整的项目实行流程有了清晰的认识,也深刻认识到了动手能力对于我们学技术的同学是多么的重要。
万事开头难,我已经硬着头皮基本完成了此次项目作业的基本功能,我会继续努力完成后续功能,相信经过日后的学习,我的能力一定会有所提升,很期待通过一段时间的学习和练习,我能感受到自己的进步。