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

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

(一)Linux运行结果

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

  试验IDEA是否正常

开始调试

1.设置断点+debug
调试程序首先要会设置断点和单步运行。设置断点,在要设置断点的行号旁用鼠标单击一下就行(Ctrl+F8)
然后单击菜单「Run」->「Debug...」(A lt+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="\t"+this.on+"\t"+this.name+"\t"+this.age+"\t"+this.java+"\t" +this.c_shar+"\t"+this.html+"\t"+this.sql+"\t"+this.sum+"\t"+this.avg; return msg; } }
import java.util.*;
public class Admin {


    String msg="\t编号\t姓名\t年龄\tjava\tc#\thtml\tsql\t总分\t平均分";
    //用来更新学生类的输出
    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%

 

猜你喜欢

转载自www.cnblogs.com/zxja/p/10583621.html