zoukankan      html  css  js  c++  java
  • 20145208实验一 Java开发环境的熟悉

    20145208实验一 Java开发环境的熟悉

    使用JDK编译、运行简单的java程序

    命令行下程序开发

    • 在命令行下建立实验目录,然后创建并进入该目录后的子目录。

    • 编译并运行一个代码

    使用IDEA 编辑、编译、运行、调试Java程序

    • 用IDEA 编辑、编译和运行Java程序很简单,不做赘述。
    • 本次试验中我主要接触断点的相关内容。因为老师给的模板里面是用的eclipse软件,而IDEA略有不同,不过IDEA中断点的设置同样很简单。
    • 选定要设置断点的代码行,在行号的区域后面单击鼠标左键即可。

    • 设置好了断点就可以点击图中小甲虫进行调试了

    • 程序运行到断点设置的指定位置后中止,下图是两个不同断点的不同结果:

    • 图1的断点在输入的后面,所以会先弹出输入对话,在输入之后运行到断点处才进入DEBUG调试窗口。图2的断点在输入之前,所以直接运行到断点处。
    • IDEA下方出现Debug视图,区域中显示了程序执行到断点处所调用过的所用方法,越下面的方法被调用的越早。

    单步调试

    • step over:点击红色方框选中的按钮,程序向下执行一行(如果当前行有方法调用,这个方法将被执行完毕返回,然后到下一行)
    • step into:点击绿色方框选中的按钮,程序向下执行一行。如果该行有自定义方法,则运行进入自定义方法(不会进入官方类库的方法)。
    • Force step into:点击黄色方框选中的按钮,在调试的时候能进入任何方法。
    • step out:点击蓝色方框选中的按钮,如果在调试的时候你进入了一个方法,并觉得该方法没有问题,你就可以使用stepout跳出该方法,返回到该方法被调用处的下一行语句。值得注意的是,该方法已执行完毕。
    • Drop frame:点击紫色圆圈选中的按钮,你将返回到当前方法的调用处重新执行,并且所有上下文变量的值也回到那个时候。只要调用链中还有上级方法,可以跳到其中的任何一个方法。

    高级调试

    • 跨断点调试:想移动到下一个断点,点击红色箭头所指按钮。程序将运行一个断点到下一个断点之间需要执行的代码。如果后面代码没有断点,再次点击该按钮将会执行完程序。
    • 查看断点:点击蓝色箭头指向的按钮,可以查看你曾经设置过的断点并可设置断点的一些属性。

    练习-4

    实验名称:实现学生成绩管理功能,并进行测试

    实验内容:

    • 使用java语言编写一个学生成绩管理的程序,并进行测试。

    实验步骤

    一、需求分析
    • 首先,我了解我是要做一个学生成绩管理的程序,那么我需要实现哪些功能呢?
      • 我要可以添加学生信息
      • 我可以查询成绩
      • 我要可以录入成绩
      • 我可以删除某个学生的信息
      • 程序要把学生信息打印出来
      • 这样就基本实现了基础的增删查改的功能了,如果可以排序就更好了。
    二、设计与代码实现
    • 作为一个学生管理程序,我需要有个存储学生信息的表。
    • 那么通过如下代码段就可以新建一个指定大小的表。
    System.out.println("请定义学生的人数:");
            Student[] stuArr = new Student[in.nextInt()];
    
    • 学生的信息包括学号姓名,而且学生的成绩可以有多门,考虑到「S.O.L.I.D」原则,我单独建立了一个学生类。
    public class Student {
        private int num;
        private String name;
        private int java;
        private int hb;
        private int sjjg;
        private int mmx;
        private int sum;
        private int avg;
        public int getNum() {
            return num;
        }
        public void setNum(int num) {
            this.num = num;
        }
        public String getName() {
            return name;
    }
    ..........(略)
    
    • 添加学生基本信息包括姓名和学号:
     Student stu = new Student();
            stu.setNum(num);
            stu.setName(name);
    
    • 查询成绩的方式可以用循环语句遍历整个表来查找:
    public void find(int num, Student[] arr) {
            for (int i = 0; i < arr.length; i++) {
                if (this.exist(num, arr[i]) == true) {
                    System.out.println(msg);
                    System.out.println(arr[i]);
                    return;
                }
            }
            System.out.println("没有找到该学生信息");
    }
    
    • 录入成绩与添加基本成绩的方法类似,不做赘述。
    • 删除学生与查找类似,就是在查找到之后进行一个删除的步骤,代码段如下: arr[i] = null;
    • 对于成绩排序的方式可以有多种,排序的方法也有不同。我的方法如下:
    for (int i = 0; i < arr.length; i++) {
                    for (int j = i + 1; j < arr.length; j++) {
                        if (arr[i] != null && arr[j] != null) {
                            if (arr[i].getJava() < arr[j].getJava()) {
                                Student t = arr[i];
                                arr[i] = arr[j];
                                arr[j] = t;
                            }
                        }
                    }
    }
    
    • 如果想对不同成绩进行排序只需要修改代码段arr[i].getJava() < arr[j].getJava()就可以了。
    • 同样的,因为处理数据的方法比较多,我也新建了一个admin类。
    • 到这里,整个程序的框架就基本完成了。
    测试与分析总结
    • 测试结果如下

    • 虽然基本功能是实现了,但是还有许多细节的地方还需要优化,程序的友好度有待提升,功能还可以更加丰富一点
    步骤 耗时 百分比
    需求分析 5min 5%
    设计 15min 15%
    代码实现 65min 65%
    测试 10min 10%
    分析总结 5min 5%

    |步骤| 耗时| 百分比|
    |
    需求分析 20min 16.7
    设计 20min 16.7
    代码实现 50min 41.7
    测试 15min 12.5
    分析总结 15min 12.5

    实验中的问题及解决

    • 在代码编辑的时候,因为这次实验的代码量很大,我一开始没有分类编写,把所有的代码都写在了一个类里面,写到一半我就觉得很乱,思路也跟着不清晰了,所以我干脆仿照书上RPG那块的代码的撰写方式,把结构拆分开来,分类编写,这样只会就觉得思路很清晰。

    感想

    • 在本次实验中,我通过实践中操作深刻体会到了分类编写的好处,不仅仅是防止代码重复,而且还有助于我们思路的清晰。
    • 因为这次实验有C语言基础,在学习C语言的时候我也写过类似的代码,所以在思路上很清晰,这也让我发现,其实无论是写java还C,只要有一个清晰的思路,有一个明确的逻辑,在掌握了相关算法,实现起来真的不难,通过实验,我学习java的信心更多了。

    实验代码

  • 相关阅读:
    Mybatis Generator 生成的mapper只有insert方法
    someone you loved 歌词翻译
    Illegal instant due to time zone offset transition (Asia/Shanghai)_夏令时问题
    React js ReactDOM.render 语句后面不能加分号
    node js 路由
    node -v node is not define
    怎样从gitHub上面拉项目
    工作3年java面试题整理(自用)
    状态模式
    代理模式
  • 原文地址:https://www.cnblogs.com/20145208cy/p/5374946.html
Copyright © 2011-2022 走看看