学号 2018-2019-20175212 实验一 《Java开发环境的熟悉》

一、实验内容及步骤

1.使用JDK编译、运行简单的Java程序

  • mkdir 20175212exp1创建20175212epx1目录
  • cd 20175212exp1 进入20175212exp1目录
  • mkdir src , mkdir bin , cd src 创建子目录并进入
  • atom Hello.java 使用atom编辑器编写Hello.java文件
  • cd ..回到上级目录
  • javac -d bin src/Hello.java 编译代码并将可执行文件产生在bin目录中
  • cd bin java Hello 运行代码

实验截图如下

2.使用IDEA调试Java程序

  • 设置断点 (如下图)

  • 单步运行

    step into(F7)

    step over(F8)

  • 从一个断点到另一个断点 Resume(F9)

  • 设置条件断点(如下图)

  • 设置临时断点(如下图)

3.练习

实验题目:4. 实现学生成绩管理功能(增删改,排序,查找),并进行测试(正常情况,异常情况,边界情况)。

代码为:

package student.score.manage;

public class Score {

    String num;

    String name;

    double score;

    public Score(){

    }

    public void setNum(String num) {

        this.num = num;

    }

    public void setName(String name) {

        this.name = name;

    }

    public void setScore(double score) {

        this.score = score;

    }

}


package student.score.manage; import java.util.Scanner; public class ScoreList { int maxLength = 100; int length = 0; Score[] data = new Score[maxLength]; Scanner input = new Scanner(System.in); public ScoreList() { } //添加记录方法 public void add() { if(length < maxLength) { data[length] = new Score(); System.out.print("请输入学生的学号: "); data[length].setNum(input.next()); System.out.print("请输入学生的姓名:"); data[length].setName(input.next()); System.out.print("请输入学生的成绩:"); data[length].setScore(input.nextDouble()); length++; System.out.println("添加成功!"); } else { System.out.println("添加失败!"); } } //显示成绩单方法 public void transcript() { System.out.println("====================================="); System.out.println(" 学号 姓名 成绩 "); for(int i = 0; i < length; i++) { System.out.println(data[i].num + "\t" + data[i].name + "\t" + "\t" + data[i].score); } System.out.println("=====================================\n"); } //成绩从高往低排序方法 public void sort() { Score temp = new Score(); for(int i = 1; i < length; i++) { for(int j = 0; j < length - i; j++) { if(data[j].score < data[j + 1].score) { //冒泡法排序 temp = data[j]; data[j] = data[j + 1]; data[j + 1] = temp; } } } } //平均分、最大最小值方法 public void average() { double sum = 0.0; double max = 0.0; double min = 100.0; for(int i = 0; i < length; i++) { sum += data[i].score; max = max > data[i].score ? max : data[i].score; min = min < data[i].score ? min : data[i].score; //三目运算法 } System.out.printf("这门课的平均成绩为: %.2f\n", sum/length); System.out.println("最高分为: " + max + "\n" + "最低分为: " + min + "\n"); } //删除学生记录方法 public void delete() { System.out.print("请输入您要删除信息的学生的学号: "); String number1 = input.next(); int i, flag = length; for(i = 0; i < length; i++) { if(number1.equals(data[i].num)) { flag = i; break; } } if(i == length) { System.out.println("查无此人!请核对后重新输入 \n"); delete(); } else { for(int j = flag; j < length; j++) { data[j] = data[j + 1]; } System.out.println("删除成功!\n"); length -= 1; //不减1会报数组越界的错误 } } //查询某个学生信息方法 public void inquire() { System.out.print("请输入您要查询成绩的学生的学号:"); String number2 = input.next(); int i; for(i = 0; i < length; i++) { if(number2.equals(data[i].num)) { System.out.println("===================================="); System.out.println(" 学号 姓名 成绩 "); System.out.println(data[i].num + "\t" + data[i].name + "\t" + "\t" + data[i].score); System.out.println("====================================\n"); break; } } if(i == length) { System.out.println("查无此人!请核对后重新输入学号 \n"); inquire(); } } //修改学生信息方法 public void recompose() { System.out.print("请输入您要修改信息的学生的学号:"); String number3 = input.next(); int i; for(i = 0; i < length; i++) { if(number3.equals(data[i].num)) { System.out.println("请输入该学生新的学号,姓名和成绩:"); data[i].setNum(input.next()); data[i].setName(input.next()); data[i].setScore(input.nextDouble()); System.out.println("修改成功!\n"); break; } } if(i == length) { System.out.println("查无此人!请核对后重新输入学号\n"); recompose(); } } }

package student.score.manage; import java.util.Scanner; public class Test { public static void main(String[] args) { Scanner input = new Scanner(System.in); String choice = "1"; ScoreList studentScoreList = new ScoreList(); System.out.println("**********学生成绩管理系统********"); while(choice.equals("0") == false) { System.out.println("1.查看学生成绩单"); System.out.println("2.添加学生成绩记录"); System.out.println("3.修改学生成绩记录"); System.out.println("4.删除学生成绩记录"); System.out.println("5.查看某位学生成绩记录"); System.out.println("6.统计这门课平均分、最高分和最低分"); System.out.println("7.按成绩从高往低排序,并输出"); System.out.println("0.退出程序"); System.out.print("Enter your choice: "); choice = input.next(); switch(choice) { case "0": System.out.println("谢谢您的使用,欢迎下次光临!\n" + "**********按任意键结束程序**********"); break; case "1": studentScoreList.transcript(); System.out.println("请问您还需要什么服务?\n"); break; case "2": int i = 1; do { studentScoreList.add(); System.out.println("\n是否继续添加?" + "\n" + "0.否" + "\n" + "1.是"); i = input.nextInt(); }while(i == 1); System.out.println("请问您还需要什么服务?\n"); break; case "3": studentScoreList.recompose(); System.out.println("请问您还需要什么服务?\n"); break; case "4": studentScoreList.delete(); System.out.println("请问您还需要什么服务?\n"); break; case "5": studentScoreList.inquire(); System.out.println("请问您还需要什么服务?\n"); break; case "6": studentScoreList.average(); System.out.println("请问您还需要什么服务?\n"); break; case "7": studentScoreList.sort(); studentScoreList.transcript(); System.out.println("请问您还需要什么服务?\n"); break; default: System.out.println("Invalid input! Please enter again."); break; } } } }

运行结果截图:

正常情况:

  1. 添加学生

  2. 打印成绩单

  3. 添加学生

  4. 删除学生

  5. 查询学生

  6. 统计平均,最值

  7. 按成绩排序

  8. 退出程序

异常情况(当且不局限于 学号、成绩输入字符,名字输入数字时):

用IDEA调试

二、实验中遇到的问题

  • 问题一: 由于练习题目中所需构建的方法较多,难度也各不相同,但因没有主类无法进行分布编译,导致心态略炸。

  • 解决办法:利用IDAE的优点,利用软件的红波浪提醒,检查语法错误和遗漏,待完成主类之后再通过debug对程序进行调试并寻找逻辑错误。

  • 问题二:在三个类文件中首先引入包名package student.score.manage;,但一直提示语法错误。

  • 解决办法:为使成功编译运行,首先使用粗暴的办法,直接在windows目录下建立文件夹,如下图

    但回想起调试第四章代码,学习包时,编译时系统自动帮我建了文件夹。经过借鉴学习得知,原因为曾经使用的

    javac -d的编译方式 带有创建包的文件夹的功能

实验总结和感悟

  • 在类与程序的基本结构中,可以说java程序有一个个类所构成,各类均为主类所服务。另外的,如练习题四中,若一个类可在其他各类中使用,则可以选择带包编译,方便快捷。

  • 由于我抽到的题目在代码量上对我而言有些许困难,免不了有借鉴学习之处,也理解了一些还未看到的内容。因此我认为无论使结对学习写代码,或是在网上 理解的 借鉴学习,都能对自身起到鞭策追赶的作用。

  • IDEA对于语法错误与遗漏有着鲜明的提示(红色下波浪),但程序中的逻辑错误肉眼很难辨别,因而掌握使用强大的调试功能显得尤为重要。

步骤 耗时 百分比
需求分析 10min 6.7%
设计 20min 13.3%
代码实现 90min 60%
测试 10min 6.7%
分析总结 20min 13.3%

学号 2018-2019-20175212 实验一 《Java开发环境的熟悉》的更多相关文章

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

    20175208 实验一 Java开发环境的熟悉 一.实验报告封面 课程:Java程序设计 班级:1752班 姓名:张家华  学号:20175208 指导教师:娄嘉鹏 实验日期:2019年4月2日 实 ...

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

    目录 一.实验报告封面 二.实验内容 (一)命令行下的JAVA程序开发 (二)IDEA中的JAVA程序开发 (三)自主练习 三.实验总结 四.PSP时间 一.实验报告封面 北京电子科技学院(BESTI ...

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

    实验报告封面 一.实验报告封面 课程:Java程序设计 班级:1652班 姓名:王杨鸿永 学号:20165231 指导教师:娄嘉鹏 实验日期:2018年4月2日 实验时间:13:45 - 15:25 ...

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

    20165235 实验一 Java开发环境的熟悉 课程:JAVA程序设计 姓名:祁瑛 学号:20165235 指导老师:娄嘉鹏 实验日期: 2018.4.2 实验内容:java开发环境的熟悉 一,实验 ...

  5. 2018-2019-2 20175227张雪莹 《Java程序设计》 实验一 Java开发环境的熟悉

    2018-2019-2 20175227张雪莹<Java程序设计> 实验一 Java开发环境的熟悉 一.实验报告封面 课程:Java程序设计 班级:1752班 姓名:张雪莹 学号:2017 ...

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

    20175314 实验一 Java开发环境的熟悉 一.实验内容 1.使用JDK编译.运行简单的Java程序: 2.使用IDEA 编辑.编译.运行.调试Java程序. 3.完成实验,撰写实验报告,注意实 ...

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

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

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

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

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

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

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

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

随机推荐

  1. python-支付宝支付示例

      项目演示: 1.输入金额 2.扫码支付: 3.支付完成: 4.跳转回商户 一.注册账号 https://openhome.alipay.com/platform/appDaily.htm?tab= ...

  2. c# 调用RDP和SSH实现远程登陆

    1.ssh的登陆实现: windows平台可以安装OpenSSHforWindows 后,可以通过cmd 执行ssh的指令. 也可以在c#编程中实现ssh的登陆: var p = new System ...

  3. TeamCity Agent安装

    1 docker安装 docker run -it -e SERVER_URL= \ -v /home/lishan/teamcity/conf:/data/teamcity_agent/conf \ ...

  4. Linux直播推流

    Linux系统实现youtube推流直播 系统:centos-7 软件:FFMPEG, youtube-dl 1. 安装FFMPEG 创建并cd到一个目录,下载最新的FFMPEG(下面是64位,32位 ...

  5. 结巴库及词频统计bb

    下面是利用云图和结巴库完成词频统计.代码如下: # -*- coding:utf- -*- from wordcloud import WordCloud import matplotlib.pypl ...

  6. Spring history、design philosophy (Spring的历史及设计理念)

    一,Spring的发展史 1,Spring1.x 时代 在Spring1.x时代,都是通过xml文件配置bean,随着项目的不断扩大,需要将xml配置分放到不同的配置文件中,需要频繁的在java类和x ...

  7. Java类的加载和对象创建流程的详细分析

    相信我们在面试Java的时候总会有一些公司要做笔试题目的,而Java类的加载和对象创建流程的知识点也是常见的题目之一.接下来通过实例详细的分析一下: package com.test; public ...

  8. 关于C++中ios::sync_with_stdio(false)

    粘贴自:https://blog.csdn.net/weixin_44015865/article/details/84974373 在C++中的输入和输出有两种方式,一种是scanf和printf, ...

  9. React.js小书总结

    (迁移自旧博客2017 08 27) 第一阶段 react的组件相当于MVC里面的View. react.js 将帮助我们将界面分成了各个独立的小块,每一个块就是组件,这些组件之间可以组合.嵌套,就成 ...

  10. springboot实现自定义的错误页面展示

    https://blog.csdn.net/trusause/article/details/84299886 参考 SpringBoot默认的错误处理机制 默认效果为: 返回一个默认的错误页面 Wh ...