学号 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. 实现学生成绩管理功能(增删改,排序,查找),并进行测试(正常情况,异常情况,边界情况)。

代码为:

  1. package student.score.manage;
  2. public class Score {
  3. String num;
  4. String name;
  5. double score;
  6. public Score(){
  7. }
  8. public void setNum(String num) {
  9. this.num = num;
  10. }
  11. public void setName(String name) {
  12. this.name = name;
  13. }
  14. public void setScore(double score) {
  15. this.score = score;
  16. }
  17. }

  1. package student.score.manage;
  2. import java.util.Scanner;
  3. public class ScoreList {
  4. int maxLength = 100;
  5. int length = 0;
  6. Score[] data = new Score[maxLength];
  7. Scanner input = new Scanner(System.in);
  8. public ScoreList() {
  9. }
  10. //添加记录方法
  11. public void add() {
  12. if(length < maxLength) {
  13. data[length] = new Score();
  14. System.out.print("请输入学生的学号: ");
  15. data[length].setNum(input.next());
  16. System.out.print("请输入学生的姓名:");
  17. data[length].setName(input.next());
  18. System.out.print("请输入学生的成绩:");
  19. data[length].setScore(input.nextDouble());
  20. length++;
  21. System.out.println("添加成功!");
  22. }
  23. else {
  24. System.out.println("添加失败!");
  25. }
  26. }
  27. //显示成绩单方法
  28. public void transcript() {
  29. System.out.println("=====================================");
  30. System.out.println(" 学号 姓名 成绩 ");
  31. for(int i = 0; i < length; i++) {
  32. System.out.println(data[i].num + "\t" + data[i].name + "\t" + "\t" + data[i].score);
  33. }
  34. System.out.println("=====================================\n");
  35. }
  36. //成绩从高往低排序方法
  37. public void sort() {
  38. Score temp = new Score();
  39. for(int i = 1; i < length; i++) {
  40. for(int j = 0; j < length - i; j++) {
  41. if(data[j].score < data[j + 1].score) { //冒泡法排序
  42. temp = data[j]; data[j] = data[j + 1]; data[j + 1] = temp;
  43. }
  44. }
  45. }
  46. }
  47. //平均分、最大最小值方法
  48. public void average() {
  49. double sum = 0.0;
  50. double max = 0.0;
  51. double min = 100.0;
  52. for(int i = 0; i < length; i++) {
  53. sum += data[i].score;
  54. max = max > data[i].score ? max : data[i].score;
  55. min = min < data[i].score ? min : data[i].score; //三目运算法
  56. }
  57. System.out.printf("这门课的平均成绩为: %.2f\n", sum/length);
  58. System.out.println("最高分为: " + max + "\n" + "最低分为: " + min + "\n");
  59. }
  60. //删除学生记录方法
  61. public void delete() {
  62. System.out.print("请输入您要删除信息的学生的学号: ");
  63. String number1 = input.next();
  64. int i, flag = length;
  65. for(i = 0; i < length; i++) {
  66. if(number1.equals(data[i].num)) {
  67. flag = i; break;
  68. }
  69. }
  70. if(i == length) {
  71. System.out.println("查无此人!请核对后重新输入 \n");
  72. delete();
  73. }
  74. else {
  75. for(int j = flag; j < length; j++) {
  76. data[j] = data[j + 1];
  77. }
  78. System.out.println("删除成功!\n");
  79. length -= 1; //不减1会报数组越界的错误
  80. }
  81. }
  82. //查询某个学生信息方法
  83. public void inquire() {
  84. System.out.print("请输入您要查询成绩的学生的学号:");
  85. String number2 = input.next();
  86. int i;
  87. for(i = 0; i < length; i++) {
  88. if(number2.equals(data[i].num)) {
  89. System.out.println("====================================");
  90. System.out.println(" 学号 姓名 成绩 ");
  91. System.out.println(data[i].num + "\t" + data[i].name + "\t" + "\t" + data[i].score);
  92. System.out.println("====================================\n");
  93. break;
  94. }
  95. }
  96. if(i == length) {
  97. System.out.println("查无此人!请核对后重新输入学号 \n");
  98. inquire();
  99. }
  100. }
  101. //修改学生信息方法
  102. public void recompose() {
  103. System.out.print("请输入您要修改信息的学生的学号:");
  104. String number3 = input.next();
  105. int i;
  106. for(i = 0; i < length; i++) {
  107. if(number3.equals(data[i].num)) {
  108. System.out.println("请输入该学生新的学号,姓名和成绩:");
  109. data[i].setNum(input.next());
  110. data[i].setName(input.next());
  111. data[i].setScore(input.nextDouble());
  112. System.out.println("修改成功!\n");
  113. break;
  114. }
  115. }
  116. if(i == length) {
  117. System.out.println("查无此人!请核对后重新输入学号\n");
  118. recompose();
  119. }
  120. }
  121. }

  1. package student.score.manage;
  2. import java.util.Scanner;
  3. public class Test {
  4. public static void main(String[] args) {
  5. Scanner input = new Scanner(System.in);
  6. String choice = "1";
  7. ScoreList studentScoreList = new ScoreList();
  8. System.out.println("**********学生成绩管理系统********");
  9. while(choice.equals("0") == false) {
  10. System.out.println("1.查看学生成绩单");
  11. System.out.println("2.添加学生成绩记录");
  12. System.out.println("3.修改学生成绩记录");
  13. System.out.println("4.删除学生成绩记录");
  14. System.out.println("5.查看某位学生成绩记录");
  15. System.out.println("6.统计这门课平均分、最高分和最低分");
  16. System.out.println("7.按成绩从高往低排序,并输出");
  17. System.out.println("0.退出程序");
  18. System.out.print("Enter your choice: ");
  19. choice = input.next();
  20. switch(choice) {
  21. case "0":
  22. System.out.println("谢谢您的使用,欢迎下次光临!\n" + "**********按任意键结束程序**********");
  23. break;
  24. case "1":
  25. studentScoreList.transcript();
  26. System.out.println("请问您还需要什么服务?\n");
  27. break;
  28. case "2":
  29. int i = 1;
  30. do {
  31. studentScoreList.add();
  32. System.out.println("\n是否继续添加?" + "\n" + "0.否" + "\n" + "1.是");
  33. i = input.nextInt();
  34. }while(i == 1);
  35. System.out.println("请问您还需要什么服务?\n");
  36. break;
  37. case "3":
  38. studentScoreList.recompose();
  39. System.out.println("请问您还需要什么服务?\n");
  40. break;
  41. case "4":
  42. studentScoreList.delete();
  43. System.out.println("请问您还需要什么服务?\n");
  44. break;
  45. case "5":
  46. studentScoreList.inquire();
  47. System.out.println("请问您还需要什么服务?\n");
  48. break;
  49. case "6":
  50. studentScoreList.average();
  51. System.out.println("请问您还需要什么服务?\n");
  52. break;
  53. case "7":
  54. studentScoreList.sort();
  55. studentScoreList.transcript();
  56. System.out.println("请问您还需要什么服务?\n");
  57. break;
  58. default:
  59. System.out.println("Invalid input! Please enter again.");
  60. break;
  61. }
  62. }
  63. }
  64. }

运行结果截图:

正常情况:

  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中split()的用法

    Python split() 通过指定分隔符对字符串进行切片,如果参数 num 有指定值,则仅分隔 num 个子字符串. 语法: str.split(str="", num=str ...

  2. 解决mysql连接报“Communications link failure”错误

    <!--定义在从数据库获取新连接失败后重复尝试的次数.默认值: 30 :小于等于0表示无限次--> <property name="acquireRetryAttempts ...

  3. Oarcle之单行函数(上)

    dual 是一个虚表,为了满足sql句式而设置这么一个表   单行函数 字符函数 concat 拼接两个字符串 select concat (concat(ename,‘的职位是’),job) fro ...

  4. Python中的7种可调用对象

    Python中有七种可调用对象,可调用对象可使用内置函数callable来检测 一.用户自定义的函数: 使用def语句或者lambda表达式创建的函数. 二.内置函数: 使用C语言实现的函数,如len ...

  5. vmware中centos6.7系统图形化安装Oracle-无法打开RUNINSTALLER

    如果解压正确 unzip linux……1/2 unzip linux……2/2 给了权限 chown -R Oracle:oinstall /home/database/ 在oracle用户下,运行 ...

  6. 当namenode启动不了时

    重新格式即可,注意格式化前要将临时目录下的文件全部删除

  7. .eslintrc文件配置

    { // 环境定义了预定义的全局变量. "env": { //环境定义了预定义的全局变量.更多在官网查看 "browser": true, "node ...

  8. linux随

    Linux 1991芬兰大学生linus 安全 开源 免费 可靠 (堡垒机)(跳转机) 多用户 多任务 处理并发及速度比windows好很多 命令:ifconfig pwd ls -a -l -t(时 ...

  9. Spark大型电商项目实战-及其改良(2) RDD优化效果不稳定的真正原因

    首先看没有map join的第2任务: 时间线如下 接着是对应id的算子计算时间表 Stage Id Description Submitted Duration Tasks: Succeeded/T ...

  10. Integer类toString(int i,int radix)方法

    Integer类toString(int i,int radix)方法: 首先抛出java的api中的介绍: public static String toString(int i, int radi ...