课程管理系统及其他
作业6-8
前言:
难度上:由于项目的逐渐增加,题目要求变多,测试点变多,客观而言是不断递增的。主观上而言,第一次,三次是比较难的。由于第一次是开始搭建一个程序,所以是相对难的,并且其给的测试点相对较少而且其测试点的覆盖面比较的窄,只能覆盖一部分的运行样例。第三次给的程序其实与第二次给的有冲突,需要在第二次的基础上修改才可以。
知识点上:三次的课程管理系统知识点其实是差不多的, 他们的知识点的内容都差不多,只是第三次和第二次引入了动态数组储存,其中的实验成绩更多的则是对程序非常奇怪的地方的修改,添加了许多的flag。还有就是对错误输入,输入的判断使用了正则表达式第二三次中的错误类型更加的多,包括没有任何成绩,没有课程成输入课程和考核方式不匹配,超出范围,输入错误权重值不等于一其中权重值不等于一,要考虑到JAVA中浮点型的计算会有一些错误对于JAVA的自定义接口中使用了int类型的站,这种站使用帮我们更好的理解了这一种类型。
设计与分析:
1.对浮点型中计算可能存在的误差处理
if(Math.abs(sum-1)>0.001){
System.out.println(lines[0]+" : weight value error");
continue;
}
- 对各种输入错误的处理及解释
kaoShi kaoShi1 = new kaoShi();
Course course = allCourse.findCourse(lines[2]);
int score = (int)(course.quan.get(0)*Integer.parseInt(lines[3])+course.quan.get(1)*Integer.parseInt(lines[4]));
kaoShi1.get(score);
if(kaoShi1.score == -1){
System.out.println("wrong format");
continue;
}
if(allCourse.findCourse(lines[2]) == null){
System.out.println(lines[2] + " does not exist");
addFlag = false;
}
else if(allCourse.findCourse(lines[2]).kaoFlag != 1){
System.out.println(lines[0] + " " + lines[1] + " : access mode mismatch");
addFlag = false;
}
else
{
if (kaoShi1.score == -1) {
addClassFlag = false;
addFlag = false;
}
chooseClass chooseClass = new chooseClass(lines[2], lines[0], kaoShi1);
if (chooseClass.className != null && allChoose.findChoose(chooseClass) == false && addFlag == true) {
allChoose.chooseClass(chooseClass);
} else {
addClassFlag = false;
System.out.println("wrong format");
}
}
其中采用了很多的flag以便对其进行正确处理。
我采用了判断数组长度进行对每一行的处理。包括对课程,选课,成绩,个人,班级的录入。
其中的判断由于需要对各种错误的考虑,所以要对各个部分认真处理。
在编写处理数组长度的逻辑时,需要考虑到各种可能的情况和错误,以确保程序正确处理数据且不会崩溃。以下是建议的扩充:
1. 增加对数组长度的检查:在处理数组时,需要添加对数组长度是否为零或是否超出预期范围的检查,以防止越界或数组为空的错误。
2. 增加对读入数据格式的检查:对于输入的数据格式,需要进行严格的检查,以保证输入正确,防止出现格式错误。
3. 增加对数据类型的检查:对于输入的数据类型,需要确定其是否正确,特别是在进行计算等操作时,需要确保数据类型一致且不含有非法字符。
4. 增加异常处理:根据实际情况,增加适当的异常处理机制,例如对文件读写失败、网络连接中断、数据异常等情况进行处理,以防止程序崩溃或使用者无法正常使用程序。
5. 增加对输入数据范围的校验:对于输入数据的范围,要进行判断,保证不会存在过小或过大的数据,以确保算法的正确性和效率。
6. 增加对输入数据的去重:对于输入的数据,如果存在相同或重复的内容,需要对其进行去重,以避免重复计算和错误结果的出现。
- 增加数据的异常处理:在进行数据操作时,需要考虑到数据的异常情况,例如除数为0,负数下标等等,并且为了保证程序的稳定性和数据的安全性而进行特殊处理。
- 对各个部分成绩的输出
allClass.paiXv();
allClass.studentGrade(allChoose); //输出每个人的
allCourse.printCourse(allChoose);
allClass.gradePrint();
采用一下方法对学生平均成绩输出,课程平均成绩的输出,班级平均成绩的输出
8中对接口题目以public Integer pop(); //出栈,如果为空,则返回null。出栈时只移动栈顶指针,相应位置不置为null
public Integer peek(); //获得栈顶元素,如果为空,则返回null.
public boolean empty(); //如果为空返回true
public int size(); //返回栈中元素个数
为主,对方法进行完善,具体内容比较难,需要自学。
以以下为例
class ArrayIntegerStack implements IntegerStack{
private int a[];
private int end=0;
public ArrayIntegerStack(int num) {
a=new int[num];
}
然后则是对输出的处理与完善
包括
输入n,建立可包含n个元素的ArrayIntegerStack对象
输入m个值,均入栈。每次入栈均打印入栈返回结果。
输出栈顶元素,输出是否为空,输出size
使用Arrays.toString()输出内部数组中的值。
输入x,然后出栈x次,每次出栈均打印。
输出栈顶元素,输出是否为空,输出size
使用Arrays.toString()输出内部数组中的值。
容器-ArrayList-排序
这个题目相对简单
但是为了程序的合理与安全
任然需要注意:
public String getId() {
return id;
}
采用类似以下方法对其进行处理,避免直接对私有部分的处理,而是通过class内部的方法对其进行处理与输入,输出。
jmu-Java-02基本语法-03-身份证排序
这个题目关键在于排序,于是我主要对其采用了以下的处理方法
,对其进行对比,然后排序;
idNum.idNum.sort(new Comparator<idNum>() {
@Override
public int compare(idNum id1, idNum id2) {
return id1.dayNum.compareTo(id2.dayNum);
}
});
7-1 容器-HashMap-检索
主要就是了解hashmap中的键和桶。了解后就可以试用
HashMap<String,student> students = new HashMap<>();
其中是以hashmap的学生学号为键对其进行处理的,可以找到该学生信息,然后输出
踩坑心得:
第一次踩坑,主要是在读题不准确,然后就是需要对改程序反复修改,才能完善。所以还是要写想好程序结构,在开始写才能事半功倍。
第二次作业的踩坑主要是在于重新对整个题目进行面向对象的设计,第一个问题就是对面向对象其实了解很少,由于加上了实验课,需要对其判断,所以需要
第二个坑是没有提前了解好任务的需求,导致做了好久,做出来的结果。输出的顺序是有很大差距的,就给人一种很大的挫败感。第三个坑是没有了解到它删除的内容,也是需要输出的,只是不在最后的总价中计入,这错误也导致了很多的分数丢失,最后被迫在类里面添加了一个多余的方法来计算删除的价格,还有一个问题,就是整个程序的条理化不够清晰,对程序的了解不够深入,导致每一步的修改都有一些的麻烦困难。
第三次作业,7-2重复数据的踩坑,主要在于没有考虑到双重循环对于时间的不合理性,我们直接采用list里面的方法。
for(i=0;i<n;i++)
{
s[i] = in.next();
}
for(i=0;i<s.length;i++){
if(!list.contains(s[i]))
list.add(s[i]);
}
7-4单词统计与排序的坑在于读题不仔细以及对split方法的不完全了解,由于不仔细导致我不知道要去除重复单词。
s = arr.split("\\,|\\ |\\.");
在之前则是用的方法不对,不知道采用什么样的格式才能正确去除,找了好久的方法才找到之洋的结果。通过学习,我才完全知道了split方法的用法。
7-6 踩坑主要是不了解如何在JAVA中输出控制字符位数的结果,采用string.format方法,也算是学到了东西。
String.format("%.6f", result)
7-7判断数字是否是相等,由于java中float类型存在误差,所以采用<0.001作为判断标准,这是一个大坑,并且在其他作者给的样题中,也没有展现到简易这个特点,导致出现较为严重偏差。。
主要困难及改进意见:
在成绩的三个步骤中,主要存在对于各个部分处理以及优化的部分,以及在对boolean和Boolean之间的区别存在着了解。
改进意见是要自己认真学习JAVA的语法。
对于Arraylist中的int,string,string[]等类型排序处理的问题进行了学习。
改进意见是要自己通过其他博客学习list的用法,也可以从同学那里进行学习。
存在对一些问题的时间复杂度上过高
改进意见即为学习多种算法或方法来改善这一问题。
在对包括接口,Hashmap方法的学习中存在问题
解决的方法是通过对时间以及其他解决方法的学习,试图通过其他方法来解决问题,在学习并询问同学老师。
题量有一点多
多学习,多花一些时间在JAVA的学习中去。
存在一些问题无法解决
通过询问老师或同学,进行解答。考虑多种思路的解决方法来完成这一题目。
总结:
学习到什么:
对JAVA的程序结构进行了了解以及学习,了解到了JAVA中的多种接收数据的方法。
主要通过菜单的题目学习到了对面向对象的编程的方法,以及对类的属性和方法进行了认识,知道了接口,hashmap,arraylist等。
学会了在CSDN上查询一些方法并进行学习,最后完成题目。
学习了例如多种排序方法,以及自学各种的方法,知道了其是从零月开始计算。了解到需要通过学习一些算法才能解决时间复杂度要求的问题,所以今后需要对其进行广泛的学习。
以及学习了集合list的使用排序等方法,以及对list强制转换为string的学习。
需要继续学习的地方:
需要继续对一些小的算法进行学习,以便在某些对时间复杂度和空间复杂度有要求的地方能够通过。
要对JAVA与C语言中不同点进行学习,以便融会贯通。
需要对JAVA程序的条理化以及其内容的精髓进行学习。
对于JAVA中的众多方法,例如Calendar或者是List等方法的学习与精通。
对于任务目标的拆分与解析水平需要提高以及需求的分析能力。
对于课堂上的希望:
希望课堂上能够多讲一些JAVA的类型及其用法。
希望有一些简单的算法,节省空间,时间的复杂度。
反正结课了,说啥也没用了。
标签:输出,JAVA,int,lines,博客,学习,方法 From: https://www.cnblogs.com/beixipro/p/17499479.html