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 inton;privateString name;private intage;private intjava;private intc_shar;private inthtml;private intsql;private intsum;private intavg;//一个属性具备两个方法赋值和取值
public void setOn(inton){this.on=on;//把传递的参数赋值给当前的on
}public int getOn(){//取值必须返回
return this.on;
}publicString getName() {return this.name;
}public voidsetName(String name) {this.name =name;
}public intgetAge() {return this.age;
}public void setAge(intage) {this.age =age;
}public intgetJava() {returnjava;
}public void setJava(intjava) {this.java =java;
}public intgetC_shar() {returnc_shar;
}public void setC_shar(intc_shar) {this.c_shar =c_shar;
}public intgetHtml() {returnhtml;
}public void setHtml(inthtml) {this.html =html;
}public intgetSql() {returnsql;
}public void setSql(intsql) {this.sql =sql;
}public intgetSum() {returnsum;
}public voidsetSum() {this.sum = this.java+this.sql+this.html+this.c_shar;
}public voidsetAvg() {this.avg = (this.sum)/4;
}public intgetAvg() {returnavg;
}//重写toString()方法,默认toString()返回的是哈希码值
publicString 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;returnmsg;
}
}
import java.util.*;
public classAdmin {
String msg="\t编号\t姓名\t年龄\tjava\tc#\thtml\tsql\t总分\t平均分";//用来更新学生类的输出
public voidprint(Student[] arr){
System.out.println(msg);for(int i=0;i
arr[i].setSum();
arr[i].setAvg();
System.out.println(arr[i]);
}
}
}//根据编号判断学生是否存在
public boolean exist(inton,Student stu){if(stu!=null){if(stu.getOn()==on){return true;
}else{return false;
}
}return false;
}//创建添加学生的方法
public void create(String name,intage,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
}
}return 9999;
}//查询方法
public void select(int on,Student[] arr){//接收编号,并且在数组里面查
System.out.println(msg);for(int i=0;i
System.out.println(msg);
System.out.println(arr[i]);return;
}
}
System.out.println("---没有这个学生存在---");
}//更新信息
public void update(int on,String name,intage,Student[] arr){for(int i=0;i
arr[i].setName(name);
arr[i].setAge(age);
System.out.println("-----更新学生信息成功-----");this.print(arr);//更新信息
return;
}
}
System.out.println("没找到这个学生更新信息失败");
}//删除学生方法
public void delete(inton,Student[] arr){for(int i=0;i
arr[i]=null;this.print(arr);return;
}
}
System.out.println("您所指定的编号的学生没有存在");
}//输入学生成绩的操作
public void input(inton,Student[] arr){for(int i=0;i
System.out.println("请输入"+arr[i].getName()+"的Java的成绩");
Scanner in=newScanner(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(intnum,Student[] arr){if(num==1){for(int i=0;i
Student t=arr[i];
arr[i]=arr[j];
arr[j]=t;
}
}
}
}
}else if(num==2){for(int i=0;i
Student t=arr[i];
arr[i]=arr[j];
arr[j]=t;
}
}
}
}
}else if(num==3){for(int i=0;i
Student t=arr[i];
arr[i]=arr[j];
arr[j]=t;
}
}
}
}
}if(num==1){for(int i=0;i
Student t=arr[i];
arr[i]=arr[j];
arr[j]=t;
}
}
}
}
}this.print(arr);
}//根据总分进行排序操作
public voidsumSort(Student[] arr){for(int i=0;i
Student t=arr[i];
arr[i]=arr[j];
arr[j]=t;
}
}
}
}this.print(arr);
}
}
import java.util.*;public classTest {public static voidmain(String[] args){
System.out.println("----------请定义人数----------");
Scanner in=newScanner(System.in);
Student[] stuArr=new Student[in.nextInt()];//in.nextInt()用来接收用户输入的整型,数组的长度和输入的人数是一致的。
Admin adminStu=newAdmin();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%