Day09作业----------------------Java面向对象,JavaObject01-2

作业:

1. 定义一个表示学生信息的类Student,要求如下:
 (1)类Student的成员变量:
       id表示学号;name表示姓名;gender表示性别;age表示年龄;java表示Java课程成绩。
   (2) 在定义一个print()方法,输出student对象的 name,gender,age,java的值(即输出学生信息)

   (3)根据类Student的定义,创建五个该类的对象,输出每个学生的信息,计算并输出这五个学生Java语言成绩的平均值,以及计算并输出他们Java语言成绩的最大值和最小值。

  提示: 数组既可以存储基本数据类型的值,也可以存储引用数据类型的值
  因此,5个Student对象可以放在一个Student数组中
    Student[] students = new Student[5];
    students[1] = student对象的引用

  求最大值,最小值,平均值,都可以通过循环遍历 students数组来完成

2. 写一个数组的工具类ArrayTool, 要求提供遍历,求最大值,最小值,逆置数组元素,查表(在数组中查找指定元素,若不存在,待查找元素返回-1,若存在返回元素在数组中首次出现的位置),找元素在int类型数组(int[])中最后出现的索引等操作。

  提示:所谓工具类,就是一个类中定义的都是静态方法,这样的类称为工具类。工具类中定义的静态方法 就是工具方法,所谓工具方法,简单来说,就是该方法实现了一些公用的功能,为了方便使用,定义为工具方法
  比如我们之前用过的Arrays.toString(数组),就是一个工具方法,工具方法处理的都是方法参数传递的数据。
  比如定义一个查找数组最大值的方法,在工具类中就可以这样定义
  

1 class ArrayTool{
2     /*
3       查找数组中的最大值
4     */
5     public static int max(int[] a) {}
6 }

答案:

1.

参考代码:

 1 public class Work1 {
 2 
 3     public static void main(String[] args) {
 4 
 5         // 创建Student对象数组,并给数组赋值
 6         Student[] students = new Student[5];
 7         students[0] = new Student(1, "张三", "男", 18, 80);
 8         students[1] = new Student(1, "李四", "女", 20, 90);
 9         students[2] = new Student(1, "王五", "男", 180, 100);
10         students[3] = new Student(1, "赵六", "女", 30, 70);
11         students[4] = new Student(1, "孙七", "男", 8, 80);
12 
13         // 平均值
14         double average = average(students);
15         // 最大值
16         int max = max(students);
17         // 最小值
18         int min = min(students);
19     }
20 
21     /*
22      * 求5个学生java成绩的平均值
23      */
24     public static double average(Student[] students) {
25         double sum = 0;
26         for (int i = 0; i < students.length; i++) {
27             sum += students[i].java;
28         }
29 
30         return sum / students.length;
31     }
32 
33     /*
34      * 求5个学生中,java成绩的最大值
35      */
36     public static int max(Student[] students) {
37         int max = students[0].java;
38         for (int i = 1; i < students.length; i++) {
39             if (students[i].java > max) {
40                 max = students[i].java;
41             }
42         }
43         return max;
44     }
45 
46     /*
47      * 求5个学生中java成绩的最小值
48      */
49     public static int min(Student[] students) {
50         int min = students[0].java;
51         for (int i = 1; i < students.length; i++) {
52             if (students[i].java < min) {
53                 min = students[i].java;
54             }
55         }
56         return min;
57     }
58 }

自己写的代码:

 1 package com.day009;
 2 /*
 3  * 1. 定义一个表示学生信息的类Student,要求如下:
 4  (1)类Student的成员变量:
 5 id表示学号;name表示姓名;gender表示性别;age表示年龄;java表示Java课程成绩。
 6    (2) 在定义一个print()方法,输出student对象的 name,gender,age,java的值(即输出学生信息)
 7     
 8   (3)根据类Student的定义,创建五个该类的对象,输出每个学生的信息,计算并输出这五个学生Java语言成绩的平均值,
 9 以及计算并输出他们Java语言成绩的最大值和最小值。
10 
11        提示: 数组既可以存储基本数据类型的值,也可以存储引用数据类型的值
12               因此,5个Student对象可以放在一个Student数组中
13               Student[] students = new Student[5];
14               students[1] = student对象的引用
15 
16              //求最大值,最小值,平均值,都可以通过循环遍历 students数组来完成
17  */
18 public class Demo1 {
19     public static void main(String[] args) {
20         Student[] stu = new Student[5];
21         stu[0] = new Student(1,"赵一","男", 18, 88);
22         stu[1] = new Student(2,"赵二","男", 17, 97);
23         stu[2] = new Student(3,"赵三","女", 16, 89);
24         stu[3] = new Student(4,"赵四","男", 15, 78);
25         stu[4] = new Student(5,"赵五","女", 14, 84);
26         
27         //定义sum为学生Java成绩的总分
28         double sum = 0;
29         double max = stu[0].grade;
30         double min = stu[0].grade;
31         
32         for(int i = 0; i < stu.length; i++) {
33             stu[i].print();
34             sum += stu[i].grade;
35         }
36         for(int i = 1; i < stu.length; i++) {
37             if(stu[i].grade > max) {
38                 max = stu[i].grade;
39             }
40             if(stu[i].grade < min) {
41                 min = stu[i].grade;
42             }
43         }
44         
45         //几位学生的Java成绩平均分
46         double averageScore = sum/(stu.length);
47         System.out.println(stu.length +"位学生的Java成绩平均分为:" + averageScore);
48         System.out.println("Java语言成绩的最大值为:"+max);
49         System.out.println("Java语言成绩的最小值为:"+min);
50     }
51     
52     
53 }
54 
55 class Student{
56     //(1)定义成员变量
57     //id表示学号;name表示姓名;gender表示性别;age表示年龄;java表示Java课程成绩
58     int id;
59     String name;
60     String gender;
61     int age;
62     double grade;
63     
64     //(2)定义成员方法
65     public void print() {
66         System.out.println(this.id +"--"+ this.name +"--"+this.gender+"--"+this.age+"--"+this.grade);
67     }
68     //定义带5个参数的构造方法
69     public Student(int id, String name, String gender, int age, double grade) {
70         this.id = id;
71         this.name = name;
72         this.gender = gender;
73         this.age = age;
74         this.grade = grade;
75     }
76     
77 }

运行结果:

 

 

2.

参考代码:

 1 public class Work2 {
 2 
 3     public static void main(String[] args) {
 4 
 5         int[] a = { 1, 2, 3, 4, 5, 1 };
 6         // 使用工具方法
 7         int max = ArrayTool.max(a);
 8         int min = ArrayTool.min(a);
 9         int firstIndex = ArrayTool.findFirst(a, 2);
10         int lastIndex = ArrayTool.findFirst(a, 1);
11         ArrayTool.reverse(a);
12 
13     }
14 
15 }
16 
17 class ArrayTool {
18 
19     public static int max(int[] a) {
20         int max = a[0];
21         for (int i = 0; i < a.length; i++) {
22             if (a[i] > max) {
23                 max = a[i];
24             }
25         }
26         return max;
27     }
28 
29     public static int min(int[] a) {
30         int min = a[0];
31         for (int i = 0; i < a.length; i++) {
32             if (a[i] < min) {
33                 min = a[i];
34             }
35         }
36         return min;
37     }
38 
39     /*
40      * 逆置数组元素
41      */
42     public static void reverse(int[] a) {
43         int tmp;
44         for (int i = 0; i < a.length / 2; i++) {
45             tmp = a[i];
46             a[i] = a[a.length - i - 1];
47             a[a.length - i - 1] = tmp;
48         }
49     }
50 
51     /*
52      * 查表,即在数组中查找指定元素value,若找到,返回该值在数组中首次出现的位置,否则返回-1
53      */
54     public static int findFirst(int[] a, int value) {
55         for (int i = 0; i < a.length; i++) {
56             if (a[i] == value) {
57                 // 找到直接返回该元素的位置
58                 return i;
59             }
60         }
61 
62         return -1;
63     }
64 
65     /*
66      * 查找指定元素value在数组中最后出现的位置,未找到返回-1
67      */
68     public static int findLast(int[] a, int value) {
69 
70         int index = -1;
71         for (int i = 0; i < a.length; i++) {
72             if (a[i] == value) {
73                 // 找到直接返回该元素的位置
74                 index = i;
75             }
76         }
77         return index;
78     }
79 }

自己写的:

 1 package com.day009;
 2 
 3 import java.util.Arrays;
 4 
 5 /*
 6  * 2. 写一个数组的工具类ArrayTool, 要求提供
 7    遍历,求最大值,最小值,逆置数组元素,查表(在数组中查找指定元素,若不存在,待查找元素返回-1,若存在返回元素在数组中首次出现的位置),
 8    找元素在int类型数组(int[])中最后出现的索引等操作。
 9    
10    提示:所谓工具类,就是一个类中定义的都是静态方法,这样的类称为工具类。工具类中定义的静态方法  就是工具方法,
11    所谓工具方法,简单来说,就是该方法实现了一些公用的功能,为了方便使用,定义为工具方法
12 比如我们之前用过的Arrays.toString(数组),就是一个工具方法,工具方法处理的都是方法参数传递的数据。
13          比如定义一个查找数组最大值的方法,在工具类中就可以这样定义
14 */
15 public class Demo2 {
16     public static void main(String[] args) {
17         int[] arr = {1,5,2,7,3,9,4,5,12,2};
18         int num = 2;//为要查找的数组中的元素
19         //查找数组中的最大值
20         System.out.println("数组中的最大值为:"+ArrayTool.max(arr));
21         //查找数组中的最小值
22         System.out.println("数组中的最小值为:"+ArrayTool.min(arr));
23         //逆置数组元素
24         //arr1用来存放逆序后的数组
25         int[] arr1 = ArrayTool.reverse(arr);
26         System.out.println("逆置后的数组:"+ Arrays.toString(arr1));
27         //查表(在数组中查找指定元素,若不存在,待查找元素返回-1,若存在返回元素在数组中首次出现的位置)
28         //用place1来记录数组中查找num的返回位置,若为-1,则表示数组中不存在num元素
29         int place1 = ArrayTool.searchFirst(arr, num);
30         if(place1 == -1) {
31             System.out.println("数组中不存在"+num+"元素");
32         }else {
33             System.out.println(num + "在数组中首次出现的位置为"+ place1);
34         }
35         
36         //找元素在int类型数组(int[])中最后出现的索引
37         int place2 = ArrayTool.searchEnd(arr, num);
38         if(place2 == -1) {
39             System.out.println("数组中不存在"+num+"元素");
40         }else {
41             System.out.println(num + "在数组中首次出现的位置为"+ place2);
42         }
43     }
44     
45 }
46 
47 class ArrayTool{
48     
49     //查找数组中的最大值
50     public static int max(int[] a) {
51         int max = a[0];
52         for(int i = 1; i < a.length; i++) {
53             if(a[i]>max) {
54                 max = a[i];
55             }
56         }
57         return max;
58     }
59     //查找数组中的最小值
60     public static int min(int[] a) {
61         int min = a[0];
62         for(int i = 1; i < a.length; i++) {
63             if(a[i]<min) {
64                 min = a[i];
65             }
66         }
67         return min;
68     }
69     //逆置数组元素
70     public static int[] reverse(int[] a) {
71         int len = a.length;//数组a的长度
72         int[] b = new int[len];
73         for(int i = 0; i < len/2; i++) {
74             b[i] = a[i];
75             b[len-1-i] = a[len-1-i];
76         }
77         return b;
78     }
79     //查表(在数组中查找指定元素,若不存在,待查找元素返回-1,若存在返回元素在数组中首次出现的位置)
80     public static int searchFirst(int[] a, int num) {
81         for(int i = 0; i < a.length; i++) {
82             if(a[i] == num) {
83                 return i;
84             }
85         }
86         return -1;
87     }
88     //找元素在int类型数组(int[])中最后出现的索引
89     public static int searchEnd(int[] a, int num) {
90         //从后往前遍历,即最先匹配的数据就是数组中最后出现的索引
91         for(int i = a.length -1; i >= 0; i--) {
92             if(a[i] == num) {
93                 return i;
94             }
95         }
96         return -1;
97     }
98     
99 }

运行结果:

 

posted @ 2020-04-19 13:30  dust--  阅读(647)  评论(0编辑  收藏  举报