一、前言
第一次题目集相对于其他题量多但是难度较低,都没有运用到其它类,涵盖了以下知识点:变量的定义和使用、数学运算、条件语句、循环语句、字符串处理、逻辑运算符、位运算等。题目的难度初级,适合初学者。题量通常为一个或多个示例,涵盖了计算、单位换算、信息提取、类型判断等不同的问题。这些题目适合学习者在掌握基本语法和概念后进行练习和巩固。对于初学者,建议从简单的题目开始,逐步提高难度。总而言之,这些题目提供了丰富的练习机会,帮助学习者深入理解和熟练应用Java编程。
第二次题目集对于第一次来说是有一点难度的,它们涵盖了Java编程的不同方面,包括类、数组、关联类、封装性、数据处理、字符串处理、数学运算等,通过定义类和封装属性,实现了对数据的封装和访问控制,体现了面向对象编程的封装特性。。这些题目适合不同层次的Java学习者,可以帮助学习者巩固基础知识、提高问题解决能力和编程实践能力。
第三次题目集就很难了,特别是在第二题的数据处理上,就很困难。它们涵盖了Java编程的不同方面,包括类、数组、关联类、封装性、数据处理、字符串处理、数学运算等。问题在于如何进行输入输出处理、数据结构设计、逻辑判断等知识点,同时也能够提升我们的编程能力和解决问题的能力。
二、设计与分析
1.第二次作业7-1
//学生类
class Student{
private String studentid;
private String name;
private int Cgrade; //语文成绩
private int Mgrade; //数学成绩
private int Pgrade; //物理成绩
public Student(String studentId, String name,int Cgrade,int Mgrade,int Pgrade) {
this.studentid = studentId;
this.name = name;
this.Cgrade = Cgrade;
this.Mgrade = Mgrade;
this.Pgrade = Pgrade;
}
public void setStudentid(String studentid) {
this.studentid = studentid;
}
public void setName(String name) {
this.name = name;
}
public void setCgrade(int cgrade) {
Cgrade = cgrade;
}
public void setMgrade(int mgrade) {
Mgrade = mgrade;
}
public void setPgrade(int pgrade) {
Pgrade = pgrade;
}
public String getName() {
return name;
}
public String getStudentid() {
return studentid;
}
//获取总分
public int calculateTotalScore() {
return Cgrade + Mgrade + Pgrade ;
}
//获取平均分
public double calculateAverageScore() {
int totalScore = calculateTotalScore();
return (double) totalScore / 3;
}
}
类分析:
定义了一个Student类:
Student类有私有属性studentid、name、Cgrade、Mgrade和Pgrade,分别表示学生学号、姓名、语文成绩、数学成绩和物理成绩。
构造方法用于初始化学生对象的属性。
提供了一系列的setter和getter方法来设置和获取学生对象的属性。
calculateTotalScore()方法用于计算学生的总分。
calculateAverageScore()方法用于计算学生的平均分。
在Main类中,使用Scanner类获取用户输入的学生信息,并创建一个包含5个学生对象的数组。
使用循环遍历数组,为每个学生设置学生信息。
在循环结束后,使用循环遍历数组,依次输出每个学生的学号、姓名、总分和平均分。其中,平均分使用String.format()方法格式化为两位小数。
2.第二次题目集7-2
class Score {
private int dailyScore = 0;
private int finalScore = 0;
public Score(int dailyScore, int finalScore) {
this.dailyScore = dailyScore;
this.finalScore = finalScore;
}
public Score(){
}
public int getDailyScore() {
return dailyScore;
}
public int getFinalScore() {
return finalScore;
}
public int getTotalScore() {
return (int) (dailyScore * 0.4 + finalScore * 0.6);
}
}
class Student {
private String studentId;
private String name;
private Score chineseScore ;
private Score mathScore;
private Score physicsScore;
public Student(String studentId, String name, Score chineseScore, Score mathScore, Score physicsScore) {
this.studentId = studentId;
this.name = name;
this.chineseScore = chineseScore;
this.mathScore = mathScore;
this.physicsScore = physicsScore;
}
public String getStudentId() {
return studentId;
}
public String getName() {
return name;
}
//总分
public double calculateTotalScore() {
double totalScore = chineseScore.getTotalScore() + mathScore.getTotalScore() + physicsScore.getTotalScore();
return totalScore;
}
//平均成绩
public double calculateAverageScore() {
double averageScore = calculateTotalScore() / 3;
return averageScore; // 保留两位小数
}
//平时成绩
public double dailyaverage(){
double dailytatol = chineseScore.getDailyScore()+mathScore.getDailyScore()+physicsScore.getDailyScore();
double dailyaverage =dailytatol/3.0 ;
return dailyaverage;
}
//期末成绩
public double finalaverage(){
double finaltatol = chineseScore.getFinalScore() +mathScore.getFinalScore()+physicsScore.getFinalScore();
double finalaverage =finaltatol/3.0 ;
return finalaverage;
}
}
类分析:
1、定义了一个Score类,表示每门课的成绩:
Score类有私有属性dailyScore、finalScore,分别表示每日成绩和期末成绩。
构造方法用于初始化成绩对象的属性。
提供了一系列的getter方法来获取成绩对象的属性。
getTotalScore()方法用于计算课程总分。
定义了一个Student类,表示学生信息:
2、Student类有私有属性studentId、name、chineseScore、mathScore和physicsScore,分别表示学生学号、姓名、语文成绩、数学成绩和物理成绩。
构造方法用于初始化学生对象的属性。
提供了一系列的getter方法来获取学生对象的属性。
calculateTotalScore()方法用于计算学生的总分。
calculateAverageScore()方法用于计算学生的平均分。
dailyaverage()方法用于计算学生每门课的每日平均分。
finalaverage()方法用于计算学生每门课的期末平均分。
3.第二次题目集7-7:
class Dish {
String name;//菜品名称
int unit_price; //单价
int getPrice(int portion) {
if (portion == 1)
return unit_price;
else if (portion == 2)
return (int)(unit_price + unit_price / 2.0+0.5);
else
return unit_price * 2;
}
}
class Menu {
Dish[] dishes ;//= new Dish[4] ;//菜品数组,保存所有菜品信息
Dish searchDish(String dishName){
for (Dish dish : dishes) {
if (dish.name.equals(dishName)) {
return dish;
}
}
return null;
}
}
class Record {
Dish d;//菜品
int portion;//份额(1/2/3代表小/中/大份)
int getPrice(){
return d.getPrice(portion);
}//计价,计算本条记录的价格
}
class Order {
ArrayList<Record> records = new ArrayList<>();
//public Order() {}
int getTotalPrice(){
int totalPrice = 0;
for (Record record : records) {
if (record != null) {
totalPrice += record.getPrice();
}
}
return totalPrice;
}//计算订单的总价
Record addARecord(Menu menu, String dishName, int portion) {
Dish dish = menu.searchDish(dishName);
if (dish != null) {
Record record = new Record();
record.d = dish;
record.portion = portion;
records.add(record);
return record;
} else {
System.out.println(dishName + " does not exist");
return null;
}
} // 添加一条菜品信息到订单中。
}
类分析:
1、定义了一个Dish类,表示菜品:
Dish类有私有属性name和unit_price,分别表示菜品名称和单价。
getPrice(int portion)方法根据传入的份额参数计算菜品的价格。
2、定义了一个Menu类,表示菜单:
Menu类有一个菜品数组dishes,保存所有菜品的信息。
searchDish(String dishName)方法遍历菜品数组,根据菜名查找并返回相应的菜品对象。
3、定义了一个Record类,表示一条菜品记录:
Record类有私有属性d和portion,分别表示菜品对象和份额。
getPrice()方法调用菜品对象的getPrice()方法计算该记录的价格。
4、定义了一个Order类,表示订单:
Order类有一个records集合,保存所有的菜品记录。
getTotalPrice()方法遍历菜品记录,计算订单的总价。
addARecord(Menu menu, String dishName, int portion)方法根据菜名从菜单中找到相应的菜品,创建一个新的记录并添加到订单中。
类分析:
class Student {
private String studentId; // 学号
private String name; // 姓名
Course course; // 课程信息
Score score; // 课程信息
public Student() {
}
public String getStudentId() {
return studentId;
}
public String getName() {
return name;
}
public Student(String studentId ,String name, Score score, Course course) {
this.studentId = studentId;
this.name = name;
this.course = course;
this.score = score;
}
public int getTotalScore() {
if (course != null&& course.getAccessMode() != null&&course.getAccessMode().equals("考试")) {
return (int) (score.getDailyScore() * 0.3 + score.getFinalScore() * 0.7);
} else {
return score.getFinalScore();
}
}
}
// 课程类
class Course {
private String name; // 课程名称
private String type; // 课程性质
private String accessMode; // 考核方式
public Course(String name, String type, String accessMode) {
this.name = name;
this.type = type;
this.accessMode = accessMode;
}
public Course(){}
public String getName() {
return name;
}
public String getType() {
return type;
}
public String getAccessMode() {
return accessMode;
}
}
// 成绩类
class Score {
private int dailyScore; // 平时成绩
private int finalScore; // 期末成绩
public Score(int dailyScore,int finalScore){
this.dailyScore = dailyScore;
this.finalScore = finalScore;
}
public Score(){}
public int getDailyScore() {
return dailyScore;
}
public int getFinalScore() {
return finalScore;
}
}
1、定义了一个Student类,表示学生:
Student类有私有属性studentId和name,表示学号和姓名。
Student类还有两个对象引用类型的属性course和score,分别表示课程信息和成绩。
getStudentId()和getName()方法用于获取学号和姓名。
getTotalScore()方法根据课程信息和成绩计算学生的总评成绩。
2、定义了一个Course类,表示课程:
Course类有私有属性name、type和accessMode,分别表示课程名称、课程性质和考核方式。
Course类有一个构造方法用于初始化课程信息。
getName()、getType()和getAccessMode()方法用于获取课程的名称、性质和考核方式,public int getTotalScore()判断考核方式。
3、定义了一个Score类,表示成绩:
Score类有私有属性dailyScore和finalScore,分别表示平时成绩和期末成绩。
Score类有一个构造方法用于初始化成绩。
getDailyScore()和getFinalScore()方法用于获取平时成绩和期末成绩。
三、踩坑心得
在第二次题目集中的7-1中无错误
在第二次题目集中的7-2中无错误
在第二次题目集中的7-8中遇到了关于类的数组为空的情况,出现了越界,同时没有注意到题目中“如果计算出现小数,按四舍五入的规则进行处理”。
在第三次题目集中的7-2中我创建了Course[] courses = new Course[10];
Score[] scores = new Score[10];Student[] students=new Student[10];,但是未考虑到当输入不足十个时,数组会发生越界情况
一、前言
第一次题目集相对于其他题量多但是难度较低,都没有运用到其它类,涵盖了以下知识点:变量的定义和使用、数学运算、条件语句、循环语句、字符串处理、逻辑运算符、位运算等。题目的难度初级,适合初学者。题量通常为一个或多个示例,涵盖了计算、单位换算、信息提取、类型判断等不同的问题。这些题目适合学习者在掌握基本语法和概念后进行练习和巩固。对于初学者,建议从简单的题目开始,逐步提高难度。总而言之,这些题目提供了丰富的练习机会,帮助学习者深入理解和熟练应用Java编程。
第二次题目集对于第一次来说是有一点难度的,它们涵盖了Java编程的不同方面,包括类、数组、关联类、封装性、数据处理、字符串处理、数学运算等,通过定义类和封装属性,实现了对数据的封装和访问控制,体现了面向对象编程的封装特性。。这些题目适合不同层次的Java学习者,可以帮助学习者巩固基础知识、提高问题解决能力和编程实践能力。
第三次题目集就很难了,特别是在第二题的数据处理上,就很困难。它们涵盖了Java编程的不同方面,包括类、数组、关联类、封装性、数据处理、字符串处理、数学运算等。问题在于如何进行输入输出处理、数据结构设计、逻辑判断等知识点,同时也能够提升我们的编程能力和解决问题的能力。
二、设计与分析
1.第二次作业7-1
//学生类
class Student{
private String studentid;
private String name;
private int Cgrade; //语文成绩
private int Mgrade; //数学成绩
private int Pgrade; //物理成绩
public Student(String studentId, String name,int Cgrade,int Mgrade,int Pgrade) {
this.studentid = studentId;
this.name = name;
this.Cgrade = Cgrade;
this.Mgrade = Mgrade;
this.Pgrade = Pgrade;
}
public void setStudentid(String studentid) {
this.studentid = studentid;
}
public void setName(String name) {
this.name = name;
}
public void setCgrade(int cgrade) {
Cgrade = cgrade;
}
public void setMgrade(int mgrade) {
Mgrade = mgrade;
}
public void setPgrade(int pgrade) {
Pgrade = pgrade;
}
public String getName() {
return name;
}
public String getStudentid() {
return studentid;
}
//获取总分
public int calculateTotalScore() {
return Cgrade + Mgrade + Pgrade ;
}
//获取平均分
public double calculateAverageScore() {
int totalScore = calculateTotalScore();
return (double) totalScore / 3;
}
}
类分析:
定义了一个Student类:
Student类有私有属性studentid、name、Cgrade、Mgrade和Pgrade,分别表示学生学号、姓名、语文成绩、数学成绩和物理成绩。
构造方法用于初始化学生对象的属性。
提供了一系列的setter和getter方法来设置和获取学生对象的属性。
calculateTotalScore()方法用于计算学生的总分。
calculateAverageScore()方法用于计算学生的平均分。
在Main类中,使用Scanner类获取用户输入的学生信息,并创建一个包含5个学生对象的数组。
使用循环遍历数组,为每个学生设置学生信息。
在循环结束后,使用循环遍历数组,依次输出每个学生的学号、姓名、总分和平均分。其中,平均分使用String.format()方法格式化为两位小数。
2.第二次题目集7-2
class Score {
private int dailyScore = 0;
private int finalScore = 0;
public Score(int dailyScore, int finalScore) {
this.dailyScore = dailyScore;
this.finalScore = finalScore;
}
public Score(){
}
public int getDailyScore() {
return dailyScore;
}
public int getFinalScore() {
return finalScore;
}
public int getTotalScore() {
return (int) (dailyScore * 0.4 + finalScore * 0.6);
}
}
class Student {
private String studentId;
private String name;
private Score chineseScore ;
private Score mathScore;
private Score physicsScore;
public Student(String studentId, String name, Score chineseScore, Score mathScore, Score physicsScore) {
this.studentId = studentId;
this.name = name;
this.chineseScore = chineseScore;
this.mathScore = mathScore;
this.physicsScore = physicsScore;
}
public String getStudentId() {
return studentId;
}
public String getName() {
return name;
}
//总分
public double calculateTotalScore() {
double totalScore = chineseScore.getTotalScore() + mathScore.getTotalScore() + physicsScore.getTotalScore();
return totalScore;
}
//平均成绩
public double calculateAverageScore() {
double averageScore = calculateTotalScore() / 3;
return averageScore; // 保留两位小数
}
//平时成绩
public double dailyaverage(){
double dailytatol = chineseScore.getDailyScore()+mathScore.getDailyScore()+physicsScore.getDailyScore();
double dailyaverage =dailytatol/3.0 ;
return dailyaverage;
}
//期末成绩
public double finalaverage(){
double finaltatol = chineseScore.getFinalScore() +mathScore.getFinalScore()+physicsScore.getFinalScore();
double finalaverage =finaltatol/3.0 ;
return finalaverage;
}
}
类分析:
1、定义了一个Score类,表示每门课的成绩:
Score类有私有属性dailyScore、finalScore,分别表示每日成绩和期末成绩。
构造方法用于初始化成绩对象的属性。
提供了一系列的getter方法来获取成绩对象的属性。
getTotalScore()方法用于计算课程总分。
定义了一个Student类,表示学生信息:
2、Student类有私有属性studentId、name、chineseScore、mathScore和physicsScore,分别表示学生学号、姓名、语文成绩、数学成绩和物理成绩。
构造方法用于初始化学生对象的属性。
提供了一系列的getter方法来获取学生对象的属性。
calculateTotalScore()方法用于计算学生的总分。
calculateAverageScore()方法用于计算学生的平均分。
dailyaverage()方法用于计算学生每门课的每日平均分。
finalaverage()方法用于计算学生每门课的期末平均分。
3.第二次题目集7-7:
class Dish {
String name;//菜品名称
int unit_price; //单价
int getPrice(int portion) {
if (portion == 1)
return unit_price;
else if (portion == 2)
return (int)(unit_price + unit_price / 2.0+0.5);
else
return unit_price * 2;
}
}
class Menu {
Dish[] dishes ;//= new Dish[4] ;//菜品数组,保存所有菜品信息
Dish searchDish(String dishName){
for (Dish dish : dishes) {
if (dish.name.equals(dishName)) {
return dish;
}
}
return null;
}
}
class Record {
Dish d;//菜品
int portion;//份额(1/2/3代表小/中/大份)
int getPrice(){
return d.getPrice(portion);
}//计价,计算本条记录的价格
}
class Order {
ArrayList<Record> records = new ArrayList<>();
//public Order() {}
int getTotalPrice(){
int totalPrice = 0;
for (Record record : records) {
if (record != null) {
totalPrice += record.getPrice();
}
}
return totalPrice;
}//计算订单的总价
Record addARecord(Menu menu, String dishName, int portion) {
Dish dish = menu.searchDish(dishName);
if (dish != null) {
Record record = new Record();
record.d = dish;
record.portion = portion;
records.add(record);
return record;
} else {
System.out.println(dishName + " does not exist");
return null;
}
} // 添加一条菜品信息到订单中。
}
类分析:
1、定义了一个Dish类,表示菜品:
Dish类有私有属性name和unit_price,分别表示菜品名称和单价。
getPrice(int portion)方法根据传入的份额参数计算菜品的价格。
2、定义了一个Menu类,表示菜单:
Menu类有一个菜品数组dishes,保存所有菜品的信息。
searchDish(String dishName)方法遍历菜品数组,根据菜名查找并返回相应的菜品对象。
3、定义了一个Record类,表示一条菜品记录:
Record类有私有属性d和portion,分别表示菜品对象和份额。
getPrice()方法调用菜品对象的getPrice()方法计算该记录的价格。
4、定义了一个Order类,表示订单:
Order类有一个records集合,保存所有的菜品记录。
getTotalPrice()方法遍历菜品记录,计算订单的总价。
addARecord(Menu menu, String dishName, int portion)方法根据菜名从菜单中找到相应的菜品,创建一个新的记录并添加到订单中。
类分析:
class Student {
private String studentId; // 学号
private String name; // 姓名
Course course; // 课程信息
Score score; // 课程信息
public Student() {
}
public String getStudentId() {
return studentId;
}
public String getName() {
return name;
}
public Student(String studentId ,String name, Score score, Course course) {
this.studentId = studentId;
this.name = name;
this.course = course;
this.score = score;
}
public int getTotalScore() {
if (course != null&& course.getAccessMode() != null&&course.getAccessMode().equals("考试")) {
return (int) (score.getDailyScore() * 0.3 + score.getFinalScore() * 0.7);
} else {
return score.getFinalScore();
}
}
}
// 课程类
class Course {
private String name; // 课程名称
private String type; // 课程性质
private String accessMode; // 考核方式
public Course(String name, String type, String accessMode) {
this.name = name;
this.type = type;
this.accessMode = accessMode;
}
public Course(){}
public String getName() {
return name;
}
public String getType() {
return type;
}
public String getAccessMode() {
return accessMode;
}
}
// 成绩类
class Score {
private int dailyScore; // 平时成绩
private int finalScore; // 期末成绩
public Score(int dailyScore,int finalScore){
this.dailyScore = dailyScore;
this.finalScore = finalScore;
}
public Score(){}
public int getDailyScore() {
return dailyScore;
}
public int getFinalScore() {
return finalScore;
}
}
1、定义了一个Student类,表示学生:
Student类有私有属性studentId和name,表示学号和姓名。
Student类还有两个对象引用类型的属性course和score,分别表示课程信息和成绩。
getStudentId()和getName()方法用于获取学号和姓名。
getTotalScore()方法根据课程信息和成绩计算学生的总评成绩。
2、定义了一个Course类,表示课程:
Course类有私有属性name、type和accessMode,分别表示课程名称、课程性质和考核方式。
Course类有一个构造方法用于初始化课程信息。
getName()、getType()和getAccessMode()方法用于获取课程的名称、性质和考核方式,public int getTotalScore()判断考核方式。
3、定义了一个Score类,表示成绩:
Score类有私有属性dailyScore和finalScore,分别表示平时成绩和期末成绩。
Score类有一个构造方法用于初始化成绩。
getDailyScore()和getFinalScore()方法用于获取平时成绩和期末成绩。
三、踩坑心得
在第二次题目集中的7-1中无错误
在第二次题目集中的7-2中无错误
在第二次题目集中的7-8中遇到了关于类的数组为空的情况,出现了越界,同时没有注意到题目中“如果计算出现小数,按四舍五入的规则进行处理”。
在第三次题目集中的7-2中我创建了Course[] courses = new Course[10];
Score[] scores = new Score[10];Student[] students=new Student[10];,但是未考虑到当输入不足十个时,数组会发生越界情况
然后我加了判断为空时就好了
以及在判断course输出顺序时发现与所需结果不同。
四、主要困难以及改进建议
主要困难:
- 在刚开始学习Java时,他跟C语言还是有很大区别的,像创建组数,字符串等就不相同。以及在刚开始写类的时候有一些困难,没有那么严谨,格式也相差挺大,运用也不是很熟练。我们应该多写多练来提升自己。
- 有一些题目很难,主要在于如何进行输入输出处理、数据结构设计、逻辑判断等知识点,这些一直困扰着我,但是它同时也能够提升我们的编程能力和解决问题的能力。
改进建议:
-
题目理解:回顾题目要求,确保自己充分理解了题目的意思,包括输入输出格式、约束条件等。
-
设计思路:总结你在解决问题过程中采用的设计思路,比如使用何种数据结构、算法或设计模式等。
-
输入输出处理:回顾你对输入输出的处理方式,确保符合题目要求,并进行了必要的异常处理。
-
算法实现:总结你所采用的具体算法实现方法,包括算法的正确性和效率。
-
错误处理:回顾你在编码过程中出现的错误和异常情况,以及你采取的处理方式,例如错误提示、异常捕获等。
-
代码优化:对你的代码进行反思,看是否存在可以优化的地方,如减少冗余代码、提高代码可读性和可维护性。
五、总结
截至目前的三次作业,难度逐渐提高,复杂性也愈来愈高,对于面向对象程序设计思维要求也愈发增大。
这些作业对于我们的学习和提升至关重要。通过完成各种编程任务,我们可以更好地理解和掌握编程问题,提高我们的代码质量,更加熟练的进行输入输出处理、数据结构设计、逻辑判断等问题。
首先,这些作业要求我们将理论知识应用到实际问题中。在解决问题的过程中,我们需要思考并选择适当的数据结构和算法来解决具体的编程难题。通过不断地进行编码实践,我们能够更加深入地理解所学的知识,并将其应用到实际项目中。
其次,这些作业培养了我们的解决问题的能力。在完成作业的过程中,我们可能会面临各种挑战和困难,例如处理复杂的逻辑、调试代码等。这些挑战促使我们学会思考问题的多种解决方案,从而提高我们的问题解决能力和创新思维。
总而言之,这些作业是我们学习和提升编程技能的重要方式。通过完成各种编程任务,我们可以更好地理解和掌握编程问题,提高代码质量,并为未来的编程任务做好准备。同时,总结和反思作业经验,可以帮助我们不断提高自己的编码能力和实践经验,迎接未来的编程挑战。通过这样的实践和不断的努力,我们可以不断提高自己的技术水平,成为一名优秀的程序员。