20175221 实验一《Java开发环境的熟悉》实验报告
20175221 实验一《Java开发环境的熟悉》实验报告
(一)Linux运行结果
(二)IDEA下Java程序开发、调试:学会通过调试(Debug)来定位逻辑错误
试验IDEA是否正常
开始调试
1.设置断点+debug
调试程序首先要会设置断点和单步运行。设置断点,在要设置断点的行号旁用鼠标单击一下就行(Ctrl+F8)
然后单击菜单「Run」->「Debug...」(A
此时第5行代码没有被执行,变量sum的值并不是11,如图
lt+Shift+F9
)开始调试Java程序此时第5行代码没有被执行,变量sum的值并不是11,如图
![](https://img2018.cnblogs.com/blog/1270585/201903/1270585-20190323132520253-1555747904.jpg)
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不是跳出循环,而是直接结束 } } } }
添加人员(增)
录入成绩
删除人员(删)
更改信息(改)
![](https://img2018.cnblogs.com/blog/1270585/201903/1270585-20190324153946254-501557950.png)
排序
查找
异常情况
用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% |