学号 2018-2019-20175212 实验一 《Java开发环境的熟悉》
学号 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 binjava 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;
}
}
}
}
运行结果截图:
正常情况:
添加学生

打印成绩单

添加学生

删除学生

查询学生

统计平均,最值

按成绩排序

退出程序

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

用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开发环境的熟悉》的更多相关文章
- 20175208 实验一 Java开发环境的熟悉
20175208 实验一 Java开发环境的熟悉 一.实验报告封面 课程:Java程序设计 班级:1752班 姓名:张家华 学号:20175208 指导教师:娄嘉鹏 实验日期:2019年4月2日 实 ...
- 20165223 实验一 Java开发环境的熟悉
目录 一.实验报告封面 二.实验内容 (一)命令行下的JAVA程序开发 (二)IDEA中的JAVA程序开发 (三)自主练习 三.实验总结 四.PSP时间 一.实验报告封面 北京电子科技学院(BESTI ...
- 20165231 实验一 Java开发环境的熟悉
实验报告封面 一.实验报告封面 课程:Java程序设计 班级:1652班 姓名:王杨鸿永 学号:20165231 指导教师:娄嘉鹏 实验日期:2018年4月2日 实验时间:13:45 - 15:25 ...
- 20165235 实验一 Java开发环境的熟悉
20165235 实验一 Java开发环境的熟悉 课程:JAVA程序设计 姓名:祁瑛 学号:20165235 指导老师:娄嘉鹏 实验日期: 2018.4.2 实验内容:java开发环境的熟悉 一,实验 ...
- 2018-2019-2 20175227张雪莹 《Java程序设计》 实验一 Java开发环境的熟悉
2018-2019-2 20175227张雪莹<Java程序设计> 实验一 Java开发环境的熟悉 一.实验报告封面 课程:Java程序设计 班级:1752班 姓名:张雪莹 学号:2017 ...
- 20175314 实验一 Java开发环境的熟悉
20175314 实验一 Java开发环境的熟悉 一.实验内容 1.使用JDK编译.运行简单的Java程序: 2.使用IDEA 编辑.编译.运行.调试Java程序. 3.完成实验,撰写实验报告,注意实 ...
- 20165336 实验一 Java开发环境的熟悉
20165336 实验一 Java开发环境的熟悉 一.实验报告封面 课程:Java程序设计 班级:1653班 姓名:康志强 学号:20165336 指导教师:娄嘉鹏 实验日期:2018年4月2日 实验 ...
- 20165215 实验一 Java开发环境的熟悉
20165215 实验一 Java开发环境的熟悉 一.实验报告封面 课程:Java程序设计 班级:1652班 姓名:张家佳 学号:20165215 指导教师:娄嘉鹏 实验日期:2018年4月2日 实验 ...
- 20165214 实验一 Java开发环境的熟悉
20165214 实验一 Java开发环境的熟悉 一.实验报告封面 课程:Java程序设计 班级:1652班 姓名:朱文远 学号:20165214 指导教师:娄嘉鹏 实验日期:2018年4月2日 实验 ...
- 20165205 实验一 java开发环境的熟悉 实验报告
20165205 实验一 Java开发环境的熟悉 一.实验报告封面 课程:Java程序设计 班级:1652班 姓名:刘喆君 学号:20165205 指导教师:娄嘉鹏 实验日期:2018年4月2日 实验 ...
随机推荐
- Let'sEncrypt 免费通配符/泛域名SSL证书添加使用教程
Let'sEncrypt 免费通配符/泛域名SSL证书添加使用教程 通配符证书一般还是比较贵的一般最便宜的通配符证书5.60美元一年,只不过Let'sEncrypt的有效期是3个月,对于一般用户来说基 ...
- CAN自收自发问题小结
2011-12-02 21:59:23 流程图: CAN自收自发问题小结 1,地址如何确定? 答:51的片外扩展地址,R/W脚的电平会根据代码自动更改,不需要设置. 参考 单片机的外部存储器的 ...
- java面向对象总结(二)
Java 封装 实现Java封装的步骤 java面向对象值继承 概念: 继承的格式: 类和类之间的关系: 继承的特点: 继承的优缺点 继承的好处: 继承的缺点: 继承的注意事项: 使用继承的步骤: J ...
- 通过本质看现象:关于Integer受内部初始化赋值范围限制而出现的有趣现象
左手代码,右手文章.——朱季谦 这是我的第一篇技术博客,作为一名技术小菜鸟,总体而言显得很拙见,但也算是成长路上的一个小脚印,希望能在以后的日子里,可以对JAVA技术有一个更加深入的思考与认识. 前几 ...
- 基础JAVA程序设计(多个类与方法的实现2)
设计一个类代表二维空间的一个点(Point),要求:两个成员变量:x坐标和y坐标. 设计一个类代表二维空间的一个圆(Circle),要求:两个成员变量:一个是圆心,一个是半径:提供计算圆面积的方法:提 ...
- loj 6037 「雅礼集训 2017 Day4」猜数列 - 动态规划
题目传送门 传送门 题目大意 有一个位置数列,给定$n$条线索,每条线索从某一个位置开始,一直向左或者向右走,每遇到一个还没有在线索中出现的数就将它加入线索,问最小的可能的数列长度. 依次从左到右考虑 ...
- CEF C++调用前端js方法展示传递过来的图片数据
转载:https://blog.csdn.net/lengyuezuixue/article/details/79769103 在项目开发过程中遇到一个需求,通过C++调用js方法传参给前端显示图片, ...
- android开发_文本按钮 与 输入框
1 TextView: 属性与值 android:text="文本" android:textSize="20sp" //sp为 ...
- 殊途同归 - Church-Rosser and Consistency of Evaluation
在"解释语言的语言"中提到,设计一个新的语言,仅仅是使用meta-language给出其描述是不够的,我们还需要去验证一些性质. 考虑一下我们在"解释语言 ...
- 举例理解JDK动态代理
JDK动态代理 说到java自带的动态代理api,肯定离不开反射.JDK的Proxy类实现动态代理最核心的方法: public static Object newProxyInstance(Class ...