首页 > 其他分享 >博客3

博客3

时间:2023-06-23 18:44:16浏览次数:47  
标签:输出 JAVA int lines 博客 学习 方法

课程管理系统及其他

作业6-8

前言:

难度上:由于项目的逐渐增加,题目要求变多,测试点变多,客观而言是不断递增的。主观上而言,第一次,三次是比较难的。由于第一次是开始搭建一个程序,所以是相对难的,并且其给的测试点相对较少而且其测试点的覆盖面比较的窄,只能覆盖一部分的运行样例。第三次给的程序其实与第二次给的有冲突,需要在第二次的基础上修改才可以。

知识点上:三次的课程管理系统知识点其实是差不多的, 他们的知识点的内容都差不多,只是第三次和第二次引入了动态数组储存,其中的实验成绩更多的则是对程序非常奇怪的地方的修改,添加了许多的flag。还有就是对错误输入,输入的判断使用了正则表达式第二三次中的错误类型更加的多,包括没有任何成绩,没有课程成输入课程和考核方式不匹配,超出范围,输入错误权重值不等于一其中权重值不等于一,要考虑到JAVA中浮点型的计算会有一些错误对于JAVA的自定义接口中使用了int类型的站,这种站使用帮我们更好的理解了这一种类型。

 

设计与分析:

1.对浮点型中计算可能存在的误差处理

if(Math.abs(sum-1)>0.001){
    System.out.println(lines[0]+" : weight value error");
    continue;
}

 

  1. 对各种输入错误的处理及解释

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. 增加对输入数据的去重:对于输入的数据,如果存在相同或重复的内容,需要对其进行去重,以避免重复计算和错误结果的出现。

 

  1. 增加数据的异常处理:在进行数据操作时,需要考虑到数据的异常情况,例如除数为0,负数下标等等,并且为了保证程序的稳定性和数据的安全性而进行特殊处理。

 

  1. 对各个部分成绩的输出

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

相关文章

  • 有关java的博客-3
    一、前言本次博客主是针对java学习第三阶段中的第6-8次PTA题目(成绩计算系列)的总结性博客,第三阶段的作业难度与第一阶段和第二阶段想必有所提高,对java的知识点考察主要集中在类的设计,正则表达式的运用,类的继承,多态,抽象类与接口。二、设计与分析1.课程成绩统计程序-11)类图 2......
  • 关于搭建github+hexo博客一些问题的解决
    最近通过github和hexo搭建博客时,遇到一些问题,这里写一篇博客记录一下他们的解决方法,顺便推荐几篇关于搭建博客的教程https://zhuanlan.zhihu.com/p/60578464https://firstfan119.github.io/2019/12/06/hexo-build-up/个人环境 Hexod报错hexod远程部署报错,报错信息如下:......
  • 历史最全ChatGPT、LLM相关书籍、论文、博客、工具、数据集、开源项目等资源整理分享
    ChatGPT是一个生成型预训练变换模型(GPT),使用基于人类反馈的监督学习和强化学习在GPT-3.5之上进行了微调。这两种方法都使用了人类训练员来提高模型的性能,通过人类干预以增强机器学习的效果,从而获得更为逼真的结果。在监督学习的情况下,模型被提供了这样一些对话,在对话中训练......
  • 图表示学习(GRL)精选论文、博客及视频演讲分享
    在过去的几年里,图表示学习领域以令人难以置信的速度发展,从一个比较小众的研究领域转变为深度学习中发展最快的子领域之一。--WilliamL.Hamilton图表示学习(GRL)最近越来越流行,因为它们能够对复杂系统的关系或交互进行建模。然而,GRL在机器学习领域还是一个新生领域。本资源......
  • 搭建个人博客网站经历
    本篇重点描述本人搭建Hexo并部署到Github和Vercel上的经历,无教程博客园,我回来啦!!!!本人域名:Alloverzyt.top你现在仍然可以访问它,它将一直是Allover本人的合法域名。由于部署到国外Github上,你的访问不一定成功,而且它将不会更新。正文:我花1$在namesilo上买的一级域名,自我认为很pe......
  • JAVA博客3
     一.前言第三次写Blog,相比较上一次而言自己的经验更加的丰富了,这次blog的书写相对来说要更为轻松些。内容上题目较少,只需要分析有关课程成绩统计系统,但是说容易也并不容易,每一道题都是刺头中的刺头,这一次写博客,不仅仅是以完成任务的目的,更多的,让自己重新对那些打击过自己,折磨过......
  • 深度学习能量模型/能力学习相关论文、会议、博客资源整理分享
       基于能量的模型(EBM)是生成模型(GM)的一种形式。GM通过分析样本数据集学习基础数据分布。训练后,GM可以产生其他与数据分布相匹配的数据集。EBM为许多此类学习的概率和非概率方法(尤其是图形和其他结构化模型的训练)提供了统一的框架。   EBM学习目标数据集的特征并生成相似但......
  • 第三次java博客
    在Java编程领域中,掌握如何读取和处理用户输入数据是非常基础和重要的一步。我们需要从用户那里获取输入数据,并根据输入数据进行相应的操作或计算。在这篇博客中,我们将会探讨如何在Java程序中读取和处理用户输入数据,以及如何利用这些数据来完成一些常见的任务,比如计算平均分和总成......
  • 作为开发者,为什么你应该立即开始写技术博客
    现在短视频,视频,直播,自媒体平台泛滥的时代,很多人听到“博客”的时候,可能会想:现在还有人读博客?不管你怎么想,我还是要告诉你写技术博客对于开发者有多重要。而且必须是公开的技术博客,要和自己不公开的学习笔记区分开来。就从实际案例来说,很多业界大牛都在坚持写技术博客,比如前端CSS......
  • Typora上传博客园解决方案
    最终效果右键本地的md文件,点击发送到中的bat脚本即可在当前目录下生成一个cnblog结尾的md文件,在这个文件中,图片地址已经转换,只需要将这个cnblog结尾的md文件中的内容复制到博客园进行发布即可实现过程首先找到SendTo文件夹,可通过下面的路径快速找到,复制即可%AppData%\Micros......