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. mssql sqlserver 使用sql脚本 清空所有数据库表数据的方法分享

    摘要: 下文讲述清空数据库中所有表信息的方法分享,如下所示: 实验环境:sql server 2008 实现思路: 1.禁用所有约束,外键 2.禁用所有触发器 3.删除表数据 4.开启触发器 5.开启 ...

  2. 完成代码将x插入到该顺序有序线性表中,要求该线性表依然有序

    #include <stdio.h> #include <malloc.h> int main(void) { int i, n; double s = 1.3; double ...

  3. Boosting Static Representation Robustness for Binary Clone Search against Code Obfuscation and Compiler Optimization

    用于理解恶意软件的内部工作原理,并发现系统中的漏洞,逆向工程是一种耗费人工的却很重要的技术.汇编克隆搜索引擎是通过识别那些重复的或者已知的部件来帮助逆向工程师的工作,要想设计健壮的克隆搜索引擎是一项挑 ...

  4. LeetCode算法题-Convert BST to Greater Tree(Java实现)

    这是悦乐书的第255次更新,第268篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第122题(顺位题号是538).给定二进制搜索树(BST),将其转换为更大树,使原始BS ...

  5. June. 22 2018, Week 25th. Friday

    Where words fail, music speaks. 言语无法表达时,音乐就会响起. From Hans Christian Andersen. Where words fail, musi ...

  6. 简单用数组模拟顺序栈(c++)

    **栈是一种操作受限制的线性表,太多官方的话我也不说了,我们都知道栈元素是先进后出的,它有两种存储结构,分别是顺序存储结构和链式存储结构. **今天我先记一下顺序存储结构,后面我会加上链式存储结构的. ...

  7. consul 搭建

    windows 1. 下载consul https://www.consul.io/downloads.html 2. 解压至consul_1.4.2 3.配置环境变量 path下新增D:\work\ ...

  8. C++ 既有约定

    Pascal 拼写法: 函数名MultiplyNumbers(),每个单词的首字母都大写 驼峰拼写法: 变量名 firstNumber,第一个单词的首字母采用小写 匈牙利表示法: iFirstNumb ...

  9. 获取与esp8266连接的客户端的Mac地址 IP 端口 控制停止等问题

    两个关键的库 ESP8266WebServer.h WiFiClient.h ESP8266WiFiAP.cpp C:\Users\dongdong\Desktop\Arduino-master\li ...

  10. zookeeper的分布式锁

    实现分布式锁目前有三种流行方案,分别为基于数据库.Redis.Zookeeper的方案,其中前两种方案网络上有很多资料可以参考,本文不做展开.我们来看下使用Zookeeper如何实现分布式锁. 什么是 ...