当前位置:   article > 正文

Java课程实验——实验3_面向对象(上)_实验 3 演出节目单 //perform.java //program.java //showfra

实验 3 演出节目单 //perform.java //program.java //showframe.java

目录

1、

2、

3、

4、

5、

6、

7、

第八个实验是选做,看了一眼,好像都是自主性内容,就偷懒一下吧 !


1、

实验题目:定义一个电视机类,实现电视机的基本功能(换台,调整音量,开关),并测试其功能。

测试类:

  1. package s3_1;
  2. import java.util.Scanner;
  3. public class Test {
  4. public static void main(String[] args) {
  5. TV tv = new TV();
  6. System.out.println("1.开机");
  7. System.out.println("0.关机");
  8. System.out.println("请选择:");
  9. Scanner sc = new Scanner(System.in);
  10. int tvSwitch = sc.nextInt();
  11. tv.setTvSwitch(tvSwitch);
  12. while (tv.tvSwitch == 1) {
  13. System.out.println("1.调节频道");
  14. System.out.println("2.调节音量");
  15. System.out.println("0.关机");
  16. Scanner sc1 = new Scanner(System.in);
  17. int select = sc.nextInt();
  18. switch (select) {
  19. case 1 :
  20. int channel;
  21. System.out.println("请输入频道:");
  22. Scanner sc2 = new Scanner(System.in);
  23. channel = sc.nextInt();
  24. tv.setChannel(channel);
  25. break;
  26. case 2 :
  27. int voiceChange;
  28. System.out.println("请输入音量调节方式:");
  29. Scanner sc3 = new Scanner(System.in);
  30. voiceChange = sc.nextInt();
  31. tv.setVoice(voiceChange);
  32. System.out.println("现在的音量是:" + tv.voice);
  33. break;
  34. case 0 :
  35. tv.tvSwitch = 0;
  36. System.out.println("关机成功");
  37. break;
  38. }
  39. }
  40. }
  41. }

电视机类:

  1. public class TV {
  2. public int channel = 0;
  3. public int voice = 0;
  4. public int tvSwitch = 0;
  5. //直接输入频道
  6. public void setChannel(int channel) {
  7. if (channel >= 1) {
  8. this.channel = channel;
  9. System.out.println("现在是" + channel + "台");
  10. }
  11. else System.out.println("error");
  12. }
  13. //输入voiceChange,若为1,则声音调大一度;若为0,则声音减小一度;否则输出error
  14. public void setVoice(int voiceChange) {
  15. if (voiceChange == 1)
  16. if (voice <= 3) voice ++ ;
  17. else {
  18. System.out.println("音量已经达到最大");
  19. return;//错误写法:return 0; 或 break;
  20. }
  21. else if (voiceChange == 0) {
  22. if (voice <= 0) {
  23. System.out.println("音量已经达到最小");
  24. return;
  25. }
  26. else voice -- ;
  27. }
  28. else System.out.println("error");
  29. }
  30. //输入tvSwitch,若为1,则开机,若为0,则关机,否则error
  31. public void setTvSwitch(int tvSwitch) {
  32. if (tvSwitch == 1) System.out.println("开机成功");
  33. else if (tvSwitch == 0) System.out.println("关机成功");
  34. else System.out.println("error");
  35. this.tvSwitch = tvSwitch;//这个需要加上
  36. }
  37. }

2、

实验题目: 

(1)设计一个分数类,分数的分子和分母用两个整型数表示,类中定义方法对分数进行加、减、乘、除运算;

(2)在测试类中定义分数类对象,运算并输出运算结果。

分数类:

  1. public class Fraction {
  2. public int fSon;
  3. public int fMom;
  4. //求最大公约数
  5. public int gcd(int a, int b) {
  6. //保证a>b
  7. if (a < b) {
  8. int c = b;
  9. b = a;
  10. a = c;
  11. }
  12. int r = a % b;
  13. while (r != 0) {
  14. a = b;
  15. b = r;
  16. r = a % b;
  17. }
  18. if (b < 1) b = -b;//这一步骤可以除去最大公因数为负数的情况
  19. return b;
  20. }
  21. public void fAdd(int fSon1, int fMom1, int fSon2, int fMom2) {
  22. int fm = fMom1 * fMom2;
  23. fSon1 = fSon1 * fMom2;
  24. fSon2 = fSon2 * fMom1;
  25. int fs = fSon1 + fSon2;
  26. int g = gcd(fs, fm);//最大公约数
  27. fs /= g;
  28. fm /= g;
  29. System.out.println("两数相加的结果为;" + fs + "/" + fm);
  30. }
  31. public void fSub(int fSon1, int fMom1, int fSon2, int fMom2) {
  32. int fm = fMom1 * fMom2;
  33. fSon1 = fSon1 * fMom2;
  34. fSon2 = fSon2 * fMom1;
  35. int fs = fSon1 - fSon2;
  36. int g = gcd(fs, fm);//最大公约数
  37. System.out.println("最大公约数是" + g);
  38. fs /= g;
  39. fm /= g;
  40. System.out.println("两数相减的结果为;" + fs + "/" + fm);
  41. }
  42. public void fMul(int fSon1, int fMom1, int fSon2, int fMom2) {
  43. int fm = fMom1 * fMom2;
  44. fSon1 = fSon1 * fMom2;
  45. fSon2 = fSon2 * fMom1;
  46. int fs = fSon1 * fSon2;
  47. fm *= fm;
  48. int g = gcd(fs, fm);//最大公约数
  49. fs /= g;
  50. fm /= g;
  51. System.out.println("两数相乘的结果为;" + fs + "/" + fm);
  52. }
  53. public void fDiv(int fSon1, int fMom1, int fSon2, int fMom2) {
  54. int fm = fMom1 * fMom2;
  55. fSon1 = fSon1 * fMom2;
  56. fSon2 = fSon2 * fMom1;
  57. int g = gcd(fSon1, fSon2);//最大公约数
  58. fSon1 /= g;
  59. fSon2 /= g;
  60. System.out.println("两数相除的结果为;" + fSon1 + "/" + fSon2);
  61. }
  62. }

测试类: 

  1. import java.util.Scanner;
  2. public class Test {
  3. public static void main(String[] args) {
  4. Fraction fraction = new Fraction();
  5. System.out.println("请输入第一个分数的分子:");
  6. Scanner sc1 = new Scanner(System.in);
  7. int fSon1 = sc1.nextInt();
  8. System.out.println("请输入第一个分数的分母:");
  9. Scanner sc2 = new Scanner(System.in);
  10. int fMom1 = sc2.nextInt();
  11. System.out.println("请输入第二个分数的分子:");
  12. Scanner sc3 = new Scanner(System.in);
  13. int fSon2 = sc3.nextInt();
  14. System.out.println("请输入第二个分数的分母:");
  15. Scanner sc4 = new Scanner(System.in);
  16. int fMom2 = sc4.nextInt();
  17. fraction.fAdd(fSon1, fMom1, fSon2, fMom2);
  18. fraction.fSub(fSon1, fMom1, fSon2, fMom2);
  19. fraction.fMul(fSon1, fMom1, fSon2, fMom2);
  20. fraction.fDiv(fSon1, fMom1, fSon2, fMom2);
  21. }
  22. }

3、

实验题目:

(1)定义一个手机类,定义若干属性,方法和构造方法;

(2)定义测试类,其中定义多个手机类对象,并设置不同的初始值;

(3)调用手机类的相关方法,测试该类的功能。

手机类:

  1. public class Phone {
  2. private String brand;//品牌
  3. private int price;//价格
  4. public Phone() {
  5. }
  6. public Phone(String brand, int price) {
  7. this.brand = brand;
  8. this.price = price;
  9. }
  10. public void printPhone() {
  11. System.out.println(this.brand + "品牌的手机价格为:" + this.price);
  12. }
  13. public String getBrand() {
  14. return brand;
  15. }
  16. public int getPrice() {
  17. return price;
  18. }
  19. public void setBrand(String brand) {
  20. this.brand = brand;
  21. }
  22. public void setPrice(int price) {
  23. this.price = price;
  24. }
  25. }

测试类:

  1. public class Test {
  2. public static void main(String[] args) {
  3. Phone p1 = new Phone("iPhone 12", 6799);
  4. Phone p2 = new Phone("iPhone 13", 7000);
  5. p1.printPhone();
  6. p2.printPhone();
  7. }
  8. }

4、

实验题目:

定义一个类,其中定义三个方法,分别求两个整数最大值、三个整数最大值和三个小数最大值,并测试其效果。

Number类:

  1. public class Number {
  2. public int first(int a, int b) {
  3. return a >= b ? a : b;
  4. }
  5. public int second(int a, int b, int c) {
  6. return (a >= b ? a : b) >= c ? (a >= b ? a : b) : c;
  7. }
  8. public double third(double a, double b, double c) {
  9. return (a >= b ? a : b) >= c ? (a >= b ? a : b) : c;
  10. }
  11. }

测试类: 

  1. import java.util.Scanner;
  2. public class Test {
  3. public static void main(String[] args) {
  4. Number n = new Number();
  5. System.out.println("请输入三个整数:");
  6. //只需要定义一个Scanner就行
  7. Scanner sc = new Scanner(System.in);
  8. int a = sc.nextInt();
  9. int b = sc.nextInt();
  10. int c = sc.nextInt();
  11. System.out.println("请输入三个小数:");
  12. double a1 = sc.nextDouble();
  13. double b1 = sc.nextDouble();
  14. double c1 = sc.nextDouble();
  15. System.out.println("两个整数的最大值:" + n.first(a, b));
  16. System.out.println("三个整数的最大值:" + n.second(a, b, c));
  17. System.out.println("三个小数的最大值:" + n.third(a1, b1, c1));
  18. }
  19. }

5、

实验题目:

(1)定义一个类,包含x、y两个属性,一个add方法实现对两个属性的加法运算,即x、y分别加上10和20,并定义该类的构造方法;

(2)通过定义add方法的重载,联系两种形参的传递方式(基本类型和引用类型);

(3)定义测试类,测试该类的重载方法的效果,总结两种参数传递的区别。

  1. public class Test {
  2. public static void main(String[] args) {
  3. Number n = new Number();
  4. Number n2 = new Number(3, 34);
  5. Number n3 = new Number(3,34);
  6. Number n4 = new Number(3, 34);
  7. int x = 3, y = 34;
  8. n.add(x, y);
  9. System.out.println("add之后的x和y:" + x + "," + y);//值传递,不改变实参
  10. n2.add(n2);
  11. System.out.println("第二次add之后的x和y:" + n2.x + "," + n2.y);//引用传递的是地址,改变实参
  12. n3.add(n4);
  13. System.out.println("n3的值:" + n3.x + "," + n3.y);
  14. System.out.println("第三次add之后的x和y:" + n4.x + "," + n4.y);
  15. }
  16. }
  1. public class Number {
  2. int x;
  3. int y;
  4. public Number() {
  5. }
  6. public Number(int x, int y) {
  7. this.x = x;
  8. this.y = y;
  9. }
  10. //基本类型(值类型)传递参数
  11. public void add(int x, int y) {
  12. x += 10;
  13. y += 20;
  14. }
  15. //引用类型传参
  16. public void add(Number n) {
  17. n.x += 10;
  18. n.y += 20;
  19. }
  20. }

不难看出,在引用传递参数中,只有被传进的对象的x和y才会发生改变(如n4),而调用add方法的n3的x和y并不发生改变。 

6、

实验题目:

(1)设计一个学生类Student,包含至少两个成员变量,其中包含一个类变量,定义构造方法和一个类方法,输出该类的成员变量的值(注意类变量和实例变量的访问方式区别);

(2)定义测试类,实例化一个Student对象,然后调用该对象的相关方法,观察并分析类方法与实例方法的区别,总结静态变量和方法使用的注意事项。

可以看出,在静态(类)方法中不能访问非静态成员变量,只能访问静态变量。因为非静态成员变量必须通过实例化对象才能赋值,而静态成员变量则可以在不创建对象的情况下,通过类名来进行访问。而非静态(实例)方法,则可以访问两个变量(即:静态成员变量和非静态成员变量都可以访问)

而且, 静态成员变量可理解为一块公共的内存区域,无论是通过类名改变其值,还是通过对象名改变其值,其值都会发生永久改变。而非静态成员变量,只能通过对象名对其值进行改变,其值永远只属于其对象,而对于其他对象不会受到影响。

类变量可以直接用类名访问,也可以用对象访问
实例变量和方法只能用对象访问和调用
静态变量为同一类所有对象共享,使用其中一个对象调用后的值将会被其他对象继续使用

  1. public class Student {
  2. public String number;
  3. public static int age;
  4. public Student() {
  5. }
  6. public Student(String number, int age) {
  7. this.number = number;
  8. this.age = age;
  9. }
  10. public void show1() {
  11. System.out.println("该学生的学号为:" + number + ",该学生的年龄为:" + age);
  12. }
  13. public static void show2() {
  14. System.out.println("该学生的年龄为" + age);
  15. }
  16. }
  17. public class Test {
  18. public static void main(String[] args) {
  19. //未创建对象,就可以访问静态变量(类变量)age
  20. Student.age = 18;
  21. Student.show2();
  22. //创建对象后访问非静态变量number
  23. Student stu = new Student("234256", 19);
  24. stu.show1();
  25. stu.show2();
  26. System.out.println("第一次用类名调用静态方法:");
  27. Student.show2();
  28. System.out.println("第二次用类名调用静态方法,但是通过对象对age值进行过修改:");
  29. stu.age = 33;
  30. Student.show2();
  31. }
  32. }

 

7、

实验题目:

(1)设计一个雇员类,属性包括:编号、姓名、年龄、职务、部门、出勤人数;方法包括:构造方法、输出信息的方法、签到方法;

(2)创建雇员类对象,统计雇员的出勤人数。

注意考虑属性和方法的访问权限,方法的功能,及main方法中如何实现要求统计的信息。

雇员类: 

  1. import java.util.Scanner;
  2. public class Employee {
  3. public String[] number = new String[1024];
  4. public String[] name = new String[1024];
  5. public String[] age = new String[1024];
  6. public String[] pos = new String[1024];
  7. public String[] dep = new String[1024];
  8. public int attendance = 0;//出勤人数
  9. int n = 0;//应到人数
  10. public Employee() {
  11. //无参构造,不初始化
  12. }
  13. public void information() {
  14. System.out.println("应到:" + n);
  15. System.out.println("出勤人数为:" + attendance);
  16. System.out.println("出勤人员信息:");
  17. for (int i = 0; i < attendance; i ++ ) {
  18. System.out.println("编号:" + number[i]);
  19. System.out.println("姓名:" + name[i]);
  20. System.out.println("年龄:" + age[i]);
  21. System.out.println("职务:" + pos[i]);
  22. System.out.println("部门:" + dep[i]);
  23. }
  24. }
  25. //签到函数
  26. public void sign() {
  27. System.out.println("请输入员工总人数:");
  28. Scanner sc = new Scanner(System.in);
  29. n = sc.nextInt();
  30. for (int i = 0; i < n; i ++ ){
  31. System.out.println("请输入编号:");
  32. number[i] = sc.next();
  33. System.out.println("请输入姓名:");
  34. name[i] = sc.next();
  35. System.out.println("请输入年龄:");
  36. age[i] = sc.next();
  37. System.out.println("请输入职务:");
  38. pos[i] = sc.next();
  39. System.out.println("请输入部门:");
  40. dep[i] = sc.next();
  41. attendance ++ ;
  42. System.out.println("你是否是最后一个签到的人,若是,则输入0,否则输入1:");
  43. int j = 0;
  44. j = sc.nextInt();
  45. if (j == 0) break;
  46. }
  47. }
  48. }

测试类: 

  1. public class Test {
  2. public static void main(String[] args) {
  3. Employee e = new Employee();
  4. System.out.println("开始签到:");
  5. e.sign();
  6. System.out.println("签到完成!");
  7. e.information();
  8. }
  9. }

控制台输入:

开始签到:
请输入员工总人数:
3
请输入编号:
2001
请输入姓名:
张三
请输入年龄:
34
请输入职务:
java后端
请输入部门:
技术部
你是否是最后一个签到的人,若是,则输入0,否则输入1:
1
请输入编号:
2002
请输入姓名:
李四
请输入年龄:
33
请输入职务:
web前端
请输入部门:
技术部
你是否是最后一个签到的人,若是,则输入0,否则输入1:
0

控制台输出:
签到完成!
应到:3
出勤人数为:2
出勤人员信息:
编号:2001
姓名:张三
年龄:34
职务:java后端
部门:技术部
编号:2002
姓名:李四
年龄:33
职务:web前端
部门:技术部

进程已结束,退出代码为 0

 

第八个实验是选做,看了一眼,好像都是自主性内容,就偷懒一下吧 !

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/207275
推荐阅读
相关标签
  

闽ICP备14008679号