20175221 实验一《Java开发环境的熟悉》实验报告
20175221 实验一《Java开发环境的熟悉》实验报告
(一)Linux运行结果

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

开始调试
lt+Shift+F9)开始调试Java程序此时第5行代码没有被执行,变量sum的值并不是11,如图

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
参考博客:
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% |
20175221 实验一《Java开发环境的熟悉》实验报告的更多相关文章
- 20145308刘昊阳 《Java程序设计》实验一 Java开发环境的熟悉 实验报告
20145308刘昊阳 <Java程序设计>实验一报告 实验名称 Java开发环境的熟悉 实验内容 使用JDK编译.运行简单的Java程序 2.使用Eclipse 编辑.编译.运行.调试J ...
- 20175316 盛茂淞 2018-2019-2 《Java程序设计》实验一 Java开发环境的熟悉 实验报告
20175316 盛茂淞 2018-2019-2 <Java程序设计>实验一 Java开发环境的熟悉 实验报告 一.实验要求 1.使用JDK编译.运行简单的Java程序: 2.使用IDEA ...
- 20165327《Java程序设计》实验一 Java开发环境的熟悉 实验报告
20165327<Java程序设计>实验二 <Java面向对象程序设计>实验报告 实验二 <Java面向对象程序设计> 一.实验报告封面 课程:Java程序设计 班 ...
- 20165205 实验一 java开发环境的熟悉 实验报告
20165205 实验一 Java开发环境的熟悉 一.实验报告封面 课程:Java程序设计 班级:1652班 姓名:刘喆君 学号:20165205 指导教师:娄嘉鹏 实验日期:2018年4月2日 实验 ...
- 20162327实验一Java开发环境的熟悉实验报告
20162327 <程序设计与数据结构>第一次实验报告 基础知识 1.JDB的使用 使用JDB调试程序需要以下五个步骤: 1.设置断点 stop in 2.run 3.print 4.ne ...
- 实验一Java开发环境的熟悉
实验一Java开发环境的熟悉 实验内容 •命令行下Java程序开发 •IDEA下Java程序开发.调试 •练习(通过命令行和Eclipse两种方式实现,在Eclipse下练习调试程序) •实现凯撒密码 ...
- 20175316 盛茂淞 实验一 Java开发环境的熟悉
20175316 盛茂淞 实验一 Java开发环境的熟悉 实验目的 使用JDK编译.运行简单的Java程序 实验要求 1.建立"自己学号exp1"的目录 2.在"自己学号 ...
- 20155327实验一 Java开发环境的熟悉
20155327实验一 Java开发环境的熟悉 实验内容 1.使用JDK编译.运行简单的java程序 2.使用IDEA编辑.编译.运行.调试java程序 实验步骤 1.使用JDK编译.运行简单的jav ...
- 20165233 实验一 Java开发环境的熟悉
20165233 实验一 Java开发环境的熟悉 实验要求 1.没有Linux基础的同学建议先学习<Linux基础入门(新版)><Vim编辑器> 课程: 2.完成实验.撰写实验 ...
- 20155231 java实验一 Java开发环境的熟悉
20155231 java实验一 Java开发环境的熟悉 实验要求 没有Linux基础的同学建议先学习<Linux基础入门(新版)><Vim编辑器> 课程: 完成实验.撰写实验 ...
随机推荐
- MySQL新参数log_error_verbosity
在介绍这个参数前,我们先聊聊参数log_warnings.我们知道MySQL中,其中log_error定义是否启用错误日志的功能和错误日志的存储位置,log_warnings定义是否将告警信息(w ...
- mysql5.7不支持group by的解决办法
1.查看sql_mode select @@global.sql_mode 查询出来的值为: ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DAT ...
- SQL根据细粒度为天的查询
当我们集成了一些前端框架,在某些展示页面上往往具有某些查询条件.而这其中日期查询的处理又较为麻烦,此处,我罗列了一种当前台上传了一种默认的date格式的日期查询数据至后台未经Controller或Se ...
- c/c++ 网络编程 UDP 发送端 bind 作用
网络编程 UDP 发送端 bind 作用 upd 发送端 调用bind函数的效果:把socket特定到一个指定的端口,如果不调用bind,内核会随机分配一个端口. upd 发送端 调用bind函数的目 ...
- C语言简单实现链栈基本几个功能
接着上一次的顺序栈,今天我记一下链栈,因为我也是刚学不久,有些地方也稍稍理解不了,所以,一起共勉.我会用我自己结合教材上画的图,争取跟代码一起结合,用文字和图最大化的解释代码,这样的话 ...
- 进程间数据传递:Queue,Pipe 进程间数据共享:Manager
1.使用multiprocessing模块的Queue实现数据传递 ''' 进程间通讯: Queue,用法跟线程里的Queue一样,put,get 线程queue没有做序列化,进程queue做序列化了 ...
- 【Python 05】Python开发环境搭建
Python3安装和使用 1.安装 Python管方下载地址 选择Customize installation安装,并且勾选Add Python 3.X to PATH. 勾选Documentatio ...
- 离线搭建Android Studio开发环境
https://blog.csdn.net/lilang_9920/article/details/81005345 自媒体可放心发,到时候再删就行了,to thi tha
- python之面相对象程序设计
一 面向对象的程序设计的由来 面向对象设计的由来见概述:http://www.cnblogs.com/linhaifeng/articles/6428835.html 面向对象的程序设计:路飞学院版 ...
- 关于wxpython多线程研究包括(import Publisher等错误研究)
作为一个自动化测试人员,开发基本的应用桌面程序是必须的!最近在研究wxpython相关知识,目前看到多线程一块,发现官方文档介绍说:"在线程中不能修改修改窗口属性!",但是实际情况 ...