zoukankan      html  css  js  c++  java
  • 20175221 实验一《Java开发环境的熟悉》实验报告

    20175221 实验一《Java开发环境的熟悉》实验报告

    (一)Linux运行结果

    (二)IDEA下Java程序开发、调试:学会通过调试(Debug)来定位逻辑错误

      试验IDEA是否正常

    开始调试

    1.设置断点+debug
    调试程序首先要会设置断点和单步运行。设置断点,在要设置断点的行号旁用鼠标单击一下就行(Ctrl+F8)
    然后单击菜单「Run」->「Debug...」(Alt+Shift+F9)开始调试Java程序
    此时第5行代码没有被执行,变量sum的值并不是11,如图
     
    2.单步运行
    单步运行让程序运行到第6行,单步运行有两种:Step Into(F7)和Step Over(快捷捷F8),优先使用Step Over,这时查看变量i的值,会看到sum等于11。如图:

    3.F9跳步

    让程序直接运行到第9行,首先我们要在第9行设置断点,然后单击Resume图标(快捷键F9),如图:

    4.条件断点

    单步执行效率比较慢还导致另外一个问题,若一个大循环中间出了问题,这时可以通过条件断点解决问题。设置条件断点,我们在第9行左边断点处单击鼠标右键,弹出断点属性框,我们设置条件“i==50”,按F9,如图:

    5.临时断点

    断点只中断一次,比如我们想把第9,10行的for循环一下子运行完,我们就需要在第12行设个条件断点。我们可以在第十二行设个断点,然后鼠标右击断点:然后点「More」,选中「Remove Once hit」

    (三)练习

    4. 实现学生成绩管理功能(增删改,排序,查找),并进行测试(正常情况,异常情况,边界情况)。

    代码编写:

    public class Student {
    private int on; private String name; private int age; private int java; private int c_shar; private int html; private int sql; private int sum; private int avg; //一个属性具备两个方法赋值和取值 public void setOn(int on){ this.on=on;//把传递的参数赋值给当前的on } public int getOn(){//取值必须返回 return this.on; } public String getName() { return this.name; } public void setName(String name) { this.name = name; } public int getAge() { return this.age; } public void setAge(int age) { this.age = age; } public int getJava() { return java; } public void setJava(int java) { this.java = java; } public int getC_shar() { return c_shar; } public void setC_shar(int c_shar) { this.c_shar = c_shar; } public int getHtml() { return html; } public void setHtml(int html) { this.html = html; } public int getSql() { return sql; } public void setSql(int sql) { this.sql = sql; } public int getSum() { return sum; } public void setSum() { this.sum = this.java+this.sql+this.html+this.c_shar; } public void setAvg() { this.avg = (this.sum)/4; } public int getAvg() { return avg; } //重写toString()方法,默认toString()返回的是哈希码值 public String toString(){ String msg=" "+this.on+" "+this.name+" "+this.age+" "+this.java+" " +this.c_shar+" "+this.html+" "+this.sql+" "+this.sum+" "+this.avg; return msg; } }
    import java.util.*;
    public class Admin {
    
    
        String msg="	编号	姓名	年龄	java	c#	html	sql	总分	平均分";
        //用来更新学生类的输出
        public void print(Student[] arr){
            System.out.println(msg);
            for(int i=0;i<arr.length;i++){
                if(arr[i]!=null){
                    arr[i].setSum();
                    arr[i].setAvg();
                    System.out.println(arr[i]);
                }
            }
        }
        //根据编号判断学生是否存在
        public boolean exist(int on,Student stu){
            if(stu!=null){
                if(stu.getOn()==on){
                    return true;
                }else{
                    return false;
                }
            }
            return false;
        }
        //创建添加学生的方法
        public void create(String name,int age,Student[] arr){
            Student stu=new Student();//new 一个对象
            stu.setName(name);
            stu.setAge(age);
            int i=this.setIndex(arr);
            stu.setOn(i);
    
    
            if(i==999){
                System.out.println("学生人数已经最大,不能继续添加了!");
            }else{
                arr[i]=stu;
            }
            this.print(arr);//更新信息
        }
        //返回数组里面为空的下标
        public int setIndex(Student[] arr){//判断学生数组里是否有人,如果没有则添加入此,有则选下一个空间
            for(int i=0;i<arr.length;i++){
                if(arr[i]==null){
                    return i;
                }
            }
            return 9999;
        }
        //查询方法
        public void select(int on,Student[] arr){//接收编号,并且在数组里面查
            System.out.println(msg);
            for(int i=0;i<arr.length;i++){
                if(this.exist(on, arr[i])){
                    System.out.println(msg);
                    System.out.println(arr[i]);
                    return;
                }
            }
    
    
            System.out.println("---没有这个学生存在---");
        }
        //更新信息
        public void update(int on,String name,int age,Student[] arr){
            for(int i=0;i<arr.length;i++){
                if(this.exist(on, arr[i])){
                    arr[i].setName(name);
                    arr[i].setAge(age);
                    System.out.println("-----更新学生信息成功-----");
                    this.print(arr);//更新信息
                    return;
                }
            }
            System.out.println("没找到这个学生更新信息失败");
    
    
        }
        //删除学生方法
        public void delete(int on,Student[] arr){
            for(int i=0;i<arr.length;i++){
                if(this.exist(on, arr[i])){
                    arr[i]=null;
                    this.print(arr);
                    return;
                }
            }
            System.out.println("您所指定的编号的学生没有存在");
        }
        //输入学生成绩的操作
        public void input(int on,Student[] arr){
            for(int i=0;i<arr.length;i++){
                if(this.exist(on, arr[i])){
                    System.out.println("请输入"+arr[i].getName()+"的Java的成绩");
                    Scanner in=new Scanner(System.in);
                    if(in.hasNextInt()){//如果用户输入的是int值,就把这个值传给它
                        arr[i].setJava(in.nextInt());
                    }
                    System.out.println("请输入"+arr[i].getName()+"的c#的成绩");
                    if(in.hasNextInt()){
                        arr[i].setC_shar(in.nextInt());
                    }
                    System.out.println("请输入"+arr[i].getName()+"的html的成绩");
                    if(in.hasNextInt()){
                        arr[i].setHtml(in.nextInt());
                    }
                    System.out.println("请输入"+arr[i].getName()+"的sql的成绩");
                    if(in.hasNextInt()){
                        arr[i].setSql(in.nextInt());
                    }
                    this.print(arr);
                    break;
                }
            }
        }
        //根据某门课程进行排序
        public void courseSort(int num,Student[] arr){
            if(num==1){
                for(int i=0;i<arr.length-1;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;
                            }
                        }
                    }
                }
            }
            else    if(num==2){
                for(int i=0;i<arr.length-1;i++){
                    for(int j=i+1;j<arr.length;j++){
                        if(arr[i]!=null&&arr[j]!=null){
                            if(arr[i].getC_shar()<arr[j].getC_shar()){
                                Student t=arr[i];
                                arr[i]=arr[j];
                                arr[j]=t;
                            }
                        }
                    }
                }
            }
    
    
            else if(num==3){
                for(int i=0;i<arr.length-1;i++){
                    for(int j=i+1;j<arr.length;j++){
                        if(arr[i]!=null&&arr[j]!=null){
                            if(arr[i].getHtml()<arr[j].getHtml()){
                                Student t=arr[i];
                                arr[i]=arr[j];
                                arr[j]=t;
                            }
                        }
                    }
                }
            }
            if(num==1){
                for(int i=0;i<arr.length-1;i++){
                    for(int j=i+1;j<arr.length;j++){
                        if(arr[i]!=null&&arr[j]!=null){
                            if(arr[i].getSql()<arr[j].getSql()){
                                Student t=arr[i];
                                arr[i]=arr[j];
                                arr[j]=t;
                            }
                        }
                    }
                }
            }
            this.print(arr);
        }
        //根据总分进行排序操作
        public void sumSort(Student[] arr){
            for(int i=0;i<arr.length-1;i++){
                for(int j=i+1;j<arr.length;j++){
                    if(arr[i]!=null&&arr[j]!=null){
                        if(arr[i].getSum()<arr[j].getSum()){
                            Student t=arr[i];
                            arr[i]=arr[j];
                            arr[j]=t;
                        }
                    }
                }
            }
            this.print(arr);
        }
    
    
    }
    import java.util.*;
    public class Test {
        public static void main(String[] args){
            System.out.println("----------请定义人数----------");
            Scanner in=new Scanner(System.in);
            Student[] stuArr=new Student[in.nextInt()];//in.nextInt()用来接收用户输入的整型,数组的长度和输入的人数是一致的。
            Admin adminStu=new Admin();
            while(true){
                System.out.println("-----请选择你要执行的功能:-----");
                System.out.println("10:添加一个学生");
                System.out.println("11:查找一个学生");
                System.out.println("12:根据学生编号更新学生基本信息");
                System.out.println("13:根据学生编号删除学生信息");
                System.out.println("14:根据编号输入学生的各门成绩");
                System.out.println("15:根据某门成绩进行排序");
                System.out.println("16:根据总分进行排序");
                System.out.println("99:退出系统");
                String number=in.next();
                if(number.equals("10")){
                    System.out.println("请输入学生的姓名:");
                    String name=in.next();
                    System.out.println("请输入学生的年龄:");
                    int age=in.nextInt();
                    adminStu.create(name, age, stuArr);//添加学生
                }else if(number.equals("11")){
                    System.out.println("执行查找学生的基本操作");
                    System.out.println("请输入学生的编号进行查找:");
                    int on=in.nextInt();//接收编号
                    adminStu.select(on,stuArr);//调用查找
                }else if(number.equals("12")){
                    System.out.println("-----更新成员的基本信息-----");
                    System.out.println("输入学生的编号");
                    int on=in.nextInt();
                    System.out.println("请输入学生的姓名");
                    String name=in.next();
                    System.out.println("请输入学生的年龄");
                    int age=in.nextInt();
                    adminStu.update(on,name,age,stuArr);
                }else if(number.equals("13")){
                    System.out.println("-----执行删除学生的操作-----");
                    System.out.println("请输入学生的编号");
                    int on=in.nextInt();
                    adminStu.delete(on,stuArr);
                }else if(number.equals("14")){
                    System.out.println("-----执行输入成绩的操作-----");
                    System.out.println("请输入学生的编号");
                    int on=in.nextInt();
                    adminStu.input(on,stuArr);
                }else if(number.equals("15")){
                    System.out.println("-----执行根据成绩排序的操作-----");
                    System.out.println("请选择用什么成绩进行排序?(1.Java 2.c# 3.Html 4.Sql)");
                    int num=in.nextInt();
                    adminStu.courseSort(num,stuArr);
                }else if(number.equals("16")){
                    System.out.println("-----根据总分进行排序的操作-----");
                    adminStu.sumSort(stuArr);
                }else if(number.equals("99")){
                    System.out.println("程序已经退出");
                    System.exit(0);//退出。也可以用break  break是跳出循环,exit不是跳出循环,而是直接结束
                }
    
    
            }
        }
    }
    
      

     添加人员(增)

    录入成绩

    删除人员(

    更改信息(改)
     

    排序

    查找

    异常情况

    用debug调试

    代码托管(https://gitee.com/zxjacdl/zxj175221/tree/master/20175221exp1)

     

    三、实验总结与体会

    1.IDEA中一些快捷键

    生成public static void main(String[] args) { }

    psvm

    生成System.out.orintln()

    sout

    选择 Debug

    Alt+Shift+F9

    参考博客:

    IDEA快捷键的使用

    https://github.com/judasn/IntelliJ-IDEA-Tutorial/blob/master/keymap-introduce.md#ctrl

    2.IDEA一个很好的功能就是智能补全,善于利用可以节省很多时间。并且IDEA的报错直截了当,方便马上找到错误的问题所在。

    3.通过统计下图,发现需求分析划分时间过短,代码实现时间过长,分配时间这一块做的很不合理,这是我需要改进的地方

    步骤耗时百分比
    需求分析 3min 1.8%
    设计 20min 12.3%
    代码实现 120min 73.6%
    测试 10min 6.1%
    分析总结 10min 6.1%

     

  • 相关阅读:
    centos 查看硬盘情况
    centos 修改默认启动内核,及删除无用内核
    Linux centos关机和重启命令
    MySQL同步故障:" Slave_SQL_Running:No" 两种解决办法
    centos下直接使用命令备份mysql数据库
    centos下导入mysql数据库
    HDP 3.1.0 集成 Sqoop2
    HDP 3.1.0 集成 Sqoop2 踩坑问题记录
    Spark-Bench 测试教程
    PySpark DataFrame 添加自增 ID
  • 原文地址:https://www.cnblogs.com/zxja/p/10583621.html
Copyright © 2011-2022 走看看