Java练习:面向对象的对应练习题

Java练习:面向对象的对应练习题
创建有20个学生对象,每个学生有不同的名字和性别、考试成绩。给这20个学生随机的考试成绩。
使用面向对象的思想。
题目1:统计这20个学生的平均分,男生的平均分,女生的平均分。
题目2:按照考试成绩,对这个20个学生进行排序
方法一:刘广法自己的方法(比较难)
Clazz类(班级类):
package liuguangfa.com; public class Clazz { /** * 班级新来学生的名字(随机产生名字) */ public static String name() { String oneName = ""; // 姓名库 String surNameStrings = "赵钱孙李周吴郑王"; String nameStrings = "合理开发计划发乱讲话覅还法海发生了肯定会嘎看来嘎哈啊"; // 随机产生一个数在1~surNameString.length之间 int random = (int) ((surNameStrings.length() - 1) * Math.random()) + 1; // 返回指定位置的字符 char surChar = surNameStrings.charAt(random); // 返回指定位置的字符两次 // 随机长生名字 String nameString = ""; for (int i = 0; i < 2; i++) { // 随机产生一个数在1~nameString.length之间 int nameRandom = (int) ((nameStrings.length() - 1) * Math.random()) + 1; char nameChar = nameStrings.charAt(nameRandom); nameString += nameChar; } oneName = surChar + nameString; return oneName; } /** * 班级新来学生的成绩(产生随机的成绩) */ public static double result() { double resultOne = 0; resultOne = (100 - 0) * Math.random(); // 乘10 resultOne = resultOne * 10; // 取整 resultOne = (int) resultOne; // 除10 resultOne = resultOne / 10.0; return resultOne; } /** * 班级新来学生的性别(随机生成男女) */ public static String gender() { String oneGender = ""; // 随机产生一个数,大于0.5就是男的,小于0.5就是女的 double randomAge = Math.random(); oneGender = randomAge > 0.5 ? "男" : "女"; return oneGender; } /** * 计算所有学生的平均分 */ public static double average(double[] result) { // 总成绩 double sum = 0; for (int i = 0; i < result.length; i++) { sum += result[i]; } // 平均成绩 double oneSum = sum / result.length; return oneSum; } /** * 计算男生的成绩 */ public static double manAverage(double[] result, String[] genders) { // 总成绩 double sum = 0; // 男生的个数 int man = 0; for (int i = 0; i < result.length; i++) { if (genders[i].equals("男")) { sum += result[i]; man++; } } // 平均成绩 double oneMan = sum / man; return oneMan; } /** * 计算女生的成绩- */ public static double womanAverage(double[] result, String[] genders) { // 总成绩 double sum = 0; // 女生的个数 int woman = 0; for (int i = 0; i < result.length; i++) { if (genders[i].equals("女")) { sum += result[i]; woman++; } } // 平均成绩 double oneWoman = sum / woman; return oneWoman; } /** * 对成绩进行排序(冒泡排序) */ public static double[] sorting(double[] results) { for (int i = 0; i < results.length - 1; i++) { for (int j = 0; j < results.length - i - 1; j++) { if (results[j] < results[j + 1]) { double d = results[j + 1]; results[j + 1] = results[j]; results[j] = d; } } } return results; } }
Student类:
package liuguangfa.com; public class Student { // 创建有20个学生对象,每个学生有不同的名字和性别、考试成绩。给这20个学生随机的考试成绩。 // 使用面向对象的思想。 // 题目1:统计这20个学生的平均分,男生的平均分,女生的平均分。 // 题目2:按照考试成绩,对这个20个学生进行排序 private String name; private String gender; private double result; /** * 学生构造器 */ public Student(String name, String gender, double result) { this.name = name; this.gender = gender; this.result = result; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getGender() { return gender; } public void setGender(String gender) { this.gender = gender; } public double getResult() { return result; } public void setResult(double result) { this.result = result; } }
main方法类:
package liuguangfa.com; import java.util.Arrays; public class Test { public static void main(String[] args) { // 创建20个学生,并按住姓名、性别、成绩依次储存在数组中 String[] names = new String[20]; String[] genders = new String[20]; double[] results = new double[20]; for (int i = 0; i < 20; i++) { Student student = new Student(Clazz.name(), Clazz.gender(), Clazz.result()); names[i] = student.getGender(); genders[i] = student.getGender(); results[i] = student.getResult(); } System.out.println(Arrays.toString(names)); System.out.println(Arrays.toString(genders)); System.out.println(Arrays.toString(results)); // 统计学生的平均分 double oneResult = Clazz.average(results); System.out.println("所有学生的平均分" + oneResult); // 统计男生的平均分 double manAverage = Clazz.manAverage(results, genders); System.out.println("所有男生的平均分" + manAverage); // 统计女生的平均成绩 double womanAverage = Clazz.womanAverage(results, genders); System.out.println("所有女生的平均分" + womanAverage); // 排序 System.out.println(Arrays.toString(Clazz.sorting(results))); } }
Java控制台输出结果(因为每次的结果都不一样,这里仅作为展示其中的一次):
[孙海嘎, 孙看发, 孙话覅, 吴啊来, 王会发, 孙开会, 孙还发, 吴嘎发, 吴来发, 孙计覅, 孙海开, 钱发理, 周开开, 周定了, 孙发还, 吴还肯, 周哈嘎, 王了理, 吴看计, 孙话还] [女, 男, 男, 女, 女, 女, 女, 女, 女, 女, 女, 男, 女, 男, 男, 女, 男, 男, 男, 女] [39.1, 55.8, 70.5, 6.8, 98.6, 69.1, 38.5, 6.7, 66.4, 41.5, 64.9, 69.8, 6.8, 19.5, 93.4, 35.8, 82.0, 70.2, 83.0, 70.1] 所有学生的平均分54.42499999999999 所有男生的平均分68.025 所有女生的平均分45.35833333333334 [98.6, 93.4, 83.0, 82.0, 70.5, 70.2, 70.1, 69.8, 69.1, 66.4, 64.9, 55.8, 41.5, 39.1, 38.5, 35.8, 19.5, 6.8, 6.8, 6.7]
方法二:老师提供的思路方法:
创建有20个学生对象,每个学生有不同的名字和性别、考试成绩。给这20个学生随机的考试成绩。
使用面向对象的思想。
题目1:统计这20个学生的平均分,男生的平均分,女生的平均分。
题目2:按照考试成绩,对这个20个学生进行排序
Student 类:
package liuguangfa.com; /** * 学生类 * * @author snow1k * @date 2022/03/18 */ public class Student { private String name;// 名字 private String sex;// 性别 private float score;// 成绩 public Student(String name, String sex, float score) { this.name = name; this.sex = sex; this.score = score; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public float getScore() { return score; } public void setScore(float score) { this.score = score; } @Override public String toString() { return this.name + ":" + this.sex + ":" + this.score; } }
main方法类:
package liuguangfa.com; public class Test { public static void main(String[] args) { // 创建有20个学生对象,每个学生有不同的名字和性别、考试成绩。给这20个学生随机的考试成绩。 // 使用面向对象的思想。 // 题目1:统计这20个学生的平均分,男生的平均分,女生的平均分。 // 题目2:按照考试成绩,对这个20个学生进行排序 Student[] students = new Student[20]; String[] sexToken = {"男", "女"}; for (int i = 0; i < 20; i++) { int idx = ((int)(Math.random() * 100)) % 2; float score = (float)(Math.random() * 40 + 60); Student student = new Student(i + "", sexToken[idx], score); students[i] = student; } // 题目1: float sumMale = 0;// 男生总分 float sumFemale = 0;// 女生总分 int countMale = 0;// 男生数量 int countFemale = 0;// 女生数量 for (int i = 0; i < students.length; i++) { Student stu = students[i]; if (stu.getSex().equals("男")) { sumMale += stu.getScore(); countMale++; } else { sumFemale += stu.getScore(); countFemale++; } } System.out.println("男生平均分:" + sumMale / countMale); System.out.println("女生平均分:" + sumFemale / countFemale); System.out.println("总平均分:" + (sumFemale + sumMale) / students.length); // 题目2:排序 System.out.println(Arrays.toString(students)); for (int i = 0; i < students.length - 1; i++) { for (int j = 0; j < students.length - 1 - i; j++) { if (students[j].getScore() < students[j + 1].getScore()) { Student t = students[j]; students[j] = students[j + 1]; students[j + 1] = t; } } } System.out.println(Arrays.toString(students)); } }
Java控制台输出结果:
男生平均分:86.026825 女生平均分:82.6319 总平均分:84.32936 [0:女:88.14967, 1:男:67.91951, 2:女:79.77839, 3:女:73.412636, 4:男:88.381805, 5:女:78.10037, 6:女:97.7384, 7:男:92.60951, 8:男:77.45487, 9:女:72.90633, 10:男:95.23342, 11:男:91.788025, 12:女:80.51983, 13:女:71.33554, 14:女:94.32821, 15:女:90.04964, 16:男:95.70284, 17:男:94.68119, 18:男:62.19124, 19:男:94.30583] [6:女:97.7384, 16:男:95.70284, 10:男:95.23342, 17:男:94.68119, 14:女:94.32821, 19:男:94.30583, 7:男:92.60951, 11:男:91.788025, 15:女:90.04964, 4:男:88.381805, 0:女:88.14967, 12:女:80.51983, 2:女:79.77839, 5:女:78.10037, 8:男:77.45487, 3:女:73.412636, 9:女:72.90633, 13:女:71.33554, 1:男:67.91951, 18:男:62.19124]
文章原创,转载请注意出处,来源:刘广法博客,不保留必追究