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="\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%

20175221 实验一《Java开发环境的熟悉》实验报告的更多相关文章

  1. 20145308刘昊阳 《Java程序设计》实验一 Java开发环境的熟悉 实验报告

    20145308刘昊阳 <Java程序设计>实验一报告 实验名称 Java开发环境的熟悉 实验内容 使用JDK编译.运行简单的Java程序 2.使用Eclipse 编辑.编译.运行.调试J ...

  2. 20175316 盛茂淞 2018-2019-2 《Java程序设计》实验一 Java开发环境的熟悉 实验报告

    20175316 盛茂淞 2018-2019-2 <Java程序设计>实验一 Java开发环境的熟悉 实验报告 一.实验要求 1.使用JDK编译.运行简单的Java程序: 2.使用IDEA ...

  3. 20165327《Java程序设计》实验一 Java开发环境的熟悉 实验报告

    20165327<Java程序设计>实验二 <Java面向对象程序设计>实验报告 实验二 <Java面向对象程序设计> 一.实验报告封面 课程:Java程序设计 班 ...

  4. 20165205 实验一 java开发环境的熟悉 实验报告

    20165205 实验一 Java开发环境的熟悉 一.实验报告封面 课程:Java程序设计 班级:1652班 姓名:刘喆君 学号:20165205 指导教师:娄嘉鹏 实验日期:2018年4月2日 实验 ...

  5. 20162327实验一Java开发环境的熟悉实验报告

    20162327 <程序设计与数据结构>第一次实验报告 基础知识 1.JDB的使用 使用JDB调试程序需要以下五个步骤: 1.设置断点 stop in 2.run 3.print 4.ne ...

  6. 实验一Java开发环境的熟悉

    实验一Java开发环境的熟悉 实验内容 •命令行下Java程序开发 •IDEA下Java程序开发.调试 •练习(通过命令行和Eclipse两种方式实现,在Eclipse下练习调试程序) •实现凯撒密码 ...

  7. 20175316 盛茂淞 实验一 Java开发环境的熟悉

    20175316 盛茂淞 实验一 Java开发环境的熟悉 实验目的 使用JDK编译.运行简单的Java程序 实验要求 1.建立"自己学号exp1"的目录 2.在"自己学号 ...

  8. 20155327实验一 Java开发环境的熟悉

    20155327实验一 Java开发环境的熟悉 实验内容 1.使用JDK编译.运行简单的java程序 2.使用IDEA编辑.编译.运行.调试java程序 实验步骤 1.使用JDK编译.运行简单的jav ...

  9. 20165233 实验一 Java开发环境的熟悉

    20165233 实验一 Java开发环境的熟悉 实验要求 1.没有Linux基础的同学建议先学习<Linux基础入门(新版)><Vim编辑器> 课程: 2.完成实验.撰写实验 ...

  10. 20155231 java实验一 Java开发环境的熟悉

    20155231 java实验一 Java开发环境的熟悉 实验要求 没有Linux基础的同学建议先学习<Linux基础入门(新版)><Vim编辑器> 课程: 完成实验.撰写实验 ...

随机推荐

  1. JIRA笔记(一):安装部署JIRA

    (一)     说明 说明JIRA的安装及破解. 操作系统:WIN 10 数据库:Oracle 12C R2(这个版本的jira,atlassian建议的是 12C R1,不过R2也能用,其他版本不清 ...

  2. c#二进制移位运算符 "<<"及">>","&","|","^"

    移位运算符 & :按位与,其实与&&逻辑运算符有一致的地方: | :按位或,同样与||有类似的地方. ~:按位取反 ^:按位异或 <<:左移运算符 >> ...

  3. SQLServer之创建标量函数

    创建标量函数注意事项 在 SQL Server 和 Azure SQL Database 中创建用户定义函数. 用户定义函数是接受参数.执行操作(例如复杂计算)并将操作结果以值的形式返回的 Trans ...

  4. 利用ZYNQ SOC快速打开算法验证通路(1)——MATLAB浮点数与定点二进制补码互转

    最近本人一直在学习ZYNQ SOC的使用,目的是应对科研需要,做出通用的算法验证平台.大概思想是:ZYNQ PS端负责与MATLAB等上位机数据分析与可视化软件交互:既可传输数据,也能通过上位机配置更 ...

  5. JavaScript作用域链的理解

    前言 作用域是JavaScript一个很重要的概念,想要学好JavaScript就需要理解javascript作用域和作用域链的工作原理.这篇文章对JavaScript作用域链和作用域链做一个简单的介 ...

  6. Redis学习笔记(5)——Redis数据持久化

    出处http://www.cnblogs.com/xiaoxi/p/7065328.html 一.概述 Redis的强大性能很大程度上都是因为所有数据都是存储在内存中的,然而当Redis重启后,所有存 ...

  7. Navicat Premium 12.0.18安装与激活

    因为要学习测试,postgresql , 没弄过所以用这个软件... https://www.jianshu.com/p/42a33b0dda9c

  8. Set.js--创建无重复值的无序集合

    Set 集合,不同于 Array,是一种没有重复值的集合. 以下代码出自于<JavaScript 权威指南(第六版)>P217,注意:这里并不是指 es6 / es2015 中的 Set ...

  9. SQL Server的JOIN是支持使用小括号修改执行顺序的

    假如现在我们的SQL Server数据库中有三个表:[T_A].[T_B]和[T_C],它们的建表语句如下: --建表语句[T_A] CREATE TABLE [dbo].[T_A]( [ID_A] ...

  10. odoo11 访问MSQL Server等第三发数据源

    odoo框架默认的访问时Postgres数据库,但在实际的应用场景中,不可避免的使用到其他数据库,所以有必要研究如何连接其他第三方数据库,这里分享下OCA的相关模块,具体的源代码在这里. 我将第三方的 ...