赞
踩
目录
第八个实验是选做,看了一眼,好像都是自主性内容,就偷懒一下吧 !
实验题目:定义一个电视机类,实现电视机的基本功能(换台,调整音量,开关),并测试其功能。
测试类:
- package s3_1;
-
- import java.util.Scanner;
-
- public class Test {
- public static void main(String[] args) {
-
- TV tv = new TV();
-
- System.out.println("1.开机");
- System.out.println("0.关机");
- System.out.println("请选择:");
-
- Scanner sc = new Scanner(System.in);
- int tvSwitch = sc.nextInt();
- tv.setTvSwitch(tvSwitch);
-
- while (tv.tvSwitch == 1) {
- System.out.println("1.调节频道");
- System.out.println("2.调节音量");
- System.out.println("0.关机");
- Scanner sc1 = new Scanner(System.in);
- int select = sc.nextInt();
- switch (select) {
- case 1 :
- int channel;
- System.out.println("请输入频道:");
- Scanner sc2 = new Scanner(System.in);
- channel = sc.nextInt();
- tv.setChannel(channel);
- break;
- case 2 :
- int voiceChange;
- System.out.println("请输入音量调节方式:");
- Scanner sc3 = new Scanner(System.in);
- voiceChange = sc.nextInt();
- tv.setVoice(voiceChange);
- System.out.println("现在的音量是:" + tv.voice);
- break;
- case 0 :
- tv.tvSwitch = 0;
- System.out.println("关机成功");
- break;
- }
- }
- }
- }
电视机类:
- public class TV {
-
- public int channel = 0;
- public int voice = 0;
- public int tvSwitch = 0;
-
- //直接输入频道
- public void setChannel(int channel) {
- if (channel >= 1) {
- this.channel = channel;
- System.out.println("现在是" + channel + "台");
- }
- else System.out.println("error");
- }
-
- //输入voiceChange,若为1,则声音调大一度;若为0,则声音减小一度;否则输出error
- public void setVoice(int voiceChange) {
- if (voiceChange == 1)
- if (voice <= 3) voice ++ ;
- else {
- System.out.println("音量已经达到最大");
- return;//错误写法:return 0; 或 break;
- }
- else if (voiceChange == 0) {
- if (voice <= 0) {
- System.out.println("音量已经达到最小");
- return;
- }
- else voice -- ;
- }
- else System.out.println("error");
- }
-
- //输入tvSwitch,若为1,则开机,若为0,则关机,否则error
- public void setTvSwitch(int tvSwitch) {
- if (tvSwitch == 1) System.out.println("开机成功");
- else if (tvSwitch == 0) System.out.println("关机成功");
- else System.out.println("error");
- this.tvSwitch = tvSwitch;//这个需要加上
- }
-
- }
实验题目:
(1)设计一个分数类,分数的分子和分母用两个整型数表示,类中定义方法对分数进行加、减、乘、除运算;
(2)在测试类中定义分数类对象,运算并输出运算结果。
分数类:
- public class Fraction {
- public int fSon;
- public int fMom;
-
- //求最大公约数
- public int gcd(int a, int b) {
- //保证a>b
- if (a < b) {
- int c = b;
- b = a;
- a = c;
- }
-
- int r = a % b;
- while (r != 0) {
- a = b;
- b = r;
- r = a % b;
- }
-
- if (b < 1) b = -b;//这一步骤可以除去最大公因数为负数的情况
-
- return b;
- }
-
- public void fAdd(int fSon1, int fMom1, int fSon2, int fMom2) {
- int fm = fMom1 * fMom2;
- fSon1 = fSon1 * fMom2;
- fSon2 = fSon2 * fMom1;
- int fs = fSon1 + fSon2;
- int g = gcd(fs, fm);//最大公约数
- fs /= g;
- fm /= g;
- System.out.println("两数相加的结果为;" + fs + "/" + fm);
- }
-
- public void fSub(int fSon1, int fMom1, int fSon2, int fMom2) {
- int fm = fMom1 * fMom2;
- fSon1 = fSon1 * fMom2;
- fSon2 = fSon2 * fMom1;
- int fs = fSon1 - fSon2;
- int g = gcd(fs, fm);//最大公约数
- System.out.println("最大公约数是" + g);
- fs /= g;
- fm /= g;
- System.out.println("两数相减的结果为;" + fs + "/" + fm);
- }
-
- public void fMul(int fSon1, int fMom1, int fSon2, int fMom2) {
- int fm = fMom1 * fMom2;
- fSon1 = fSon1 * fMom2;
- fSon2 = fSon2 * fMom1;
- int fs = fSon1 * fSon2;
- fm *= fm;
- int g = gcd(fs, fm);//最大公约数
- fs /= g;
- fm /= g;
- System.out.println("两数相乘的结果为;" + fs + "/" + fm);
- }
-
- public void fDiv(int fSon1, int fMom1, int fSon2, int fMom2) {
- int fm = fMom1 * fMom2;
- fSon1 = fSon1 * fMom2;
- fSon2 = fSon2 * fMom1;
- int g = gcd(fSon1, fSon2);//最大公约数
- fSon1 /= g;
- fSon2 /= g;
- System.out.println("两数相除的结果为;" + fSon1 + "/" + fSon2);
- }
- }
测试类:
- import java.util.Scanner;
-
- public class Test {
- public static void main(String[] args) {
-
- Fraction fraction = new Fraction();
-
- System.out.println("请输入第一个分数的分子:");
- Scanner sc1 = new Scanner(System.in);
- int fSon1 = sc1.nextInt();
-
- System.out.println("请输入第一个分数的分母:");
- Scanner sc2 = new Scanner(System.in);
- int fMom1 = sc2.nextInt();
-
- System.out.println("请输入第二个分数的分子:");
- Scanner sc3 = new Scanner(System.in);
- int fSon2 = sc3.nextInt();
-
- System.out.println("请输入第二个分数的分母:");
- Scanner sc4 = new Scanner(System.in);
- int fMom2 = sc4.nextInt();
-
- fraction.fAdd(fSon1, fMom1, fSon2, fMom2);
- fraction.fSub(fSon1, fMom1, fSon2, fMom2);
- fraction.fMul(fSon1, fMom1, fSon2, fMom2);
- fraction.fDiv(fSon1, fMom1, fSon2, fMom2);
-
- }
- }
实验题目:
(1)定义一个手机类,定义若干属性,方法和构造方法;
(2)定义测试类,其中定义多个手机类对象,并设置不同的初始值;
(3)调用手机类的相关方法,测试该类的功能。
手机类:
- public class Phone {
-
- private String brand;//品牌
- private int price;//价格
-
- public Phone() {
-
- }
-
- public Phone(String brand, int price) {
- this.brand = brand;
- this.price = price;
- }
-
- public void printPhone() {
- System.out.println(this.brand + "品牌的手机价格为:" + this.price);
- }
-
- public String getBrand() {
- return brand;
- }
-
- public int getPrice() {
- return price;
- }
-
- public void setBrand(String brand) {
- this.brand = brand;
- }
-
- public void setPrice(int price) {
- this.price = price;
- }
- }
测试类:
- public class Test {
- public static void main(String[] args) {
- Phone p1 = new Phone("iPhone 12", 6799);
- Phone p2 = new Phone("iPhone 13", 7000);
-
- p1.printPhone();
- p2.printPhone();
-
- }
- }
实验题目:
定义一个类,其中定义三个方法,分别求两个整数最大值、三个整数最大值和三个小数最大值,并测试其效果。
Number类:
- public class Number {
-
- public int first(int a, int b) {
- return a >= b ? a : b;
- }
-
- public int second(int a, int b, int c) {
- return (a >= b ? a : b) >= c ? (a >= b ? a : b) : c;
- }
-
- public double third(double a, double b, double c) {
- return (a >= b ? a : b) >= c ? (a >= b ? a : b) : c;
- }
- }
测试类:
- import java.util.Scanner;
-
- public class Test {
- public static void main(String[] args) {
- Number n = new Number();
- System.out.println("请输入三个整数:");
- //只需要定义一个Scanner就行
- Scanner sc = new Scanner(System.in);
- int a = sc.nextInt();
- int b = sc.nextInt();
- int c = sc.nextInt();
-
- System.out.println("请输入三个小数:");
- double a1 = sc.nextDouble();
- double b1 = sc.nextDouble();
- double c1 = sc.nextDouble();
-
- System.out.println("两个整数的最大值:" + n.first(a, b));
- System.out.println("三个整数的最大值:" + n.second(a, b, c));
- System.out.println("三个小数的最大值:" + n.third(a1, b1, c1));
- }
- }
实验题目:
(1)定义一个类,包含x、y两个属性,一个add方法实现对两个属性的加法运算,即x、y分别加上10和20,并定义该类的构造方法;
(2)通过定义add方法的重载,联系两种形参的传递方式(基本类型和引用类型);
(3)定义测试类,测试该类的重载方法的效果,总结两种参数传递的区别。
- public class Test {
- public static void main(String[] args) {
-
- Number n = new Number();
- Number n2 = new Number(3, 34);
- Number n3 = new Number(3,34);
- Number n4 = new Number(3, 34);
-
- int x = 3, y = 34;
-
- n.add(x, y);
- System.out.println("add之后的x和y:" + x + "," + y);//值传递,不改变实参
- n2.add(n2);
- System.out.println("第二次add之后的x和y:" + n2.x + "," + n2.y);//引用传递的是地址,改变实参
- n3.add(n4);
- System.out.println("n3的值:" + n3.x + "," + n3.y);
- System.out.println("第三次add之后的x和y:" + n4.x + "," + n4.y);
- }
- }
- public class Number {
- int x;
- int y;
-
- public Number() {
-
- }
-
- public Number(int x, int y) {
- this.x = x;
- this.y = y;
- }
- //基本类型(值类型)传递参数
- public void add(int x, int y) {
- x += 10;
- y += 20;
- }
-
- //引用类型传参
- public void add(Number n) {
- n.x += 10;
- n.y += 20;
- }
- }
不难看出,在引用传递参数中,只有被传进的对象的x和y才会发生改变(如n4),而调用add方法的n3的x和y并不发生改变。
实验题目:
(1)设计一个学生类Student,包含至少两个成员变量,其中包含一个类变量,定义构造方法和一个类方法,输出该类的成员变量的值(注意类变量和实例变量的访问方式区别);
(2)定义测试类,实例化一个Student对象,然后调用该对象的相关方法,观察并分析类方法与实例方法的区别,总结静态变量和方法使用的注意事项。
可以看出,在静态(类)方法中不能访问非静态成员变量,只能访问静态变量。因为非静态成员变量必须通过实例化对象才能赋值,而静态成员变量则可以在不创建对象的情况下,通过类名来进行访问。而非静态(实例)方法,则可以访问两个变量(即:静态成员变量和非静态成员变量都可以访问)
而且, 静态成员变量可理解为一块公共的内存区域,无论是通过类名改变其值,还是通过对象名改变其值,其值都会发生永久改变。而非静态成员变量,只能通过对象名对其值进行改变,其值永远只属于其对象,而对于其他对象不会受到影响。
类变量可以直接用类名访问,也可以用对象访问
实例变量和方法只能用对象访问和调用
静态变量为同一类所有对象共享,使用其中一个对象调用后的值将会被其他对象继续使用
- public class Student {
- public String number;
- public static int age;
-
- public Student() {
-
- }
-
- public Student(String number, int age) {
- this.number = number;
- this.age = age;
- }
-
- public void show1() {
- System.out.println("该学生的学号为:" + number + ",该学生的年龄为:" + age);
- }
-
- public static void show2() {
- System.out.println("该学生的年龄为" + age);
- }
- }
-
- public class Test {
- public static void main(String[] args) {
- //未创建对象,就可以访问静态变量(类变量)age
- Student.age = 18;
- Student.show2();
-
- //创建对象后访问非静态变量number
- Student stu = new Student("234256", 19);
- stu.show1();
- stu.show2();
- System.out.println("第一次用类名调用静态方法:");
- Student.show2();
- System.out.println("第二次用类名调用静态方法,但是通过对象对age值进行过修改:");
- stu.age = 33;
- Student.show2();
- }
- }
实验题目:
(1)设计一个雇员类,属性包括:编号、姓名、年龄、职务、部门、出勤人数;方法包括:构造方法、输出信息的方法、签到方法;
(2)创建雇员类对象,统计雇员的出勤人数。
注意考虑属性和方法的访问权限,方法的功能,及main方法中如何实现要求统计的信息。
雇员类:
- import java.util.Scanner;
-
- public class Employee {
- public String[] number = new String[1024];
- public String[] name = new String[1024];
- public String[] age = new String[1024];
- public String[] pos = new String[1024];
- public String[] dep = new String[1024];
- public int attendance = 0;//出勤人数
- int n = 0;//应到人数
- public Employee() {
- //无参构造,不初始化
- }
-
-
- public void information() {
- System.out.println("应到:" + n);
- System.out.println("出勤人数为:" + attendance);
- System.out.println("出勤人员信息:");
- for (int i = 0; i < attendance; i ++ ) {
- System.out.println("编号:" + number[i]);
- System.out.println("姓名:" + name[i]);
- System.out.println("年龄:" + age[i]);
- System.out.println("职务:" + pos[i]);
- System.out.println("部门:" + dep[i]);
- }
- }
-
- //签到函数
- public void sign() {
- System.out.println("请输入员工总人数:");
- Scanner sc = new Scanner(System.in);
- n = sc.nextInt();
- for (int i = 0; i < n; i ++ ){
- System.out.println("请输入编号:");
- number[i] = sc.next();
- System.out.println("请输入姓名:");
- name[i] = sc.next();
- System.out.println("请输入年龄:");
- age[i] = sc.next();
- System.out.println("请输入职务:");
- pos[i] = sc.next();
- System.out.println("请输入部门:");
- dep[i] = sc.next();
- attendance ++ ;
- System.out.println("你是否是最后一个签到的人,若是,则输入0,否则输入1:");
- int j = 0;
- j = sc.nextInt();
- if (j == 0) break;
- }
- }
-
-
- }
测试类:
- public class Test {
- public static void main(String[] args) {
- Employee e = new Employee();
- System.out.println("开始签到:");
- e.sign();
- System.out.println("签到完成!");
- e.information();
- }
- }
控制台输入:
开始签到:
请输入员工总人数:
3
请输入编号:
2001
请输入姓名:
张三
请输入年龄:
34
请输入职务:
java后端
请输入部门:
技术部
你是否是最后一个签到的人,若是,则输入0,否则输入1:
1
请输入编号:
2002
请输入姓名:
李四
请输入年龄:
33
请输入职务:
web前端
请输入部门:
技术部
你是否是最后一个签到的人,若是,则输入0,否则输入1:
0控制台输出:
签到完成!
应到:3
出勤人数为:2
出勤人员信息:
编号:2001
姓名:张三
年龄:34
职务:java后端
部门:技术部
编号:2002
姓名:李四
年龄:33
职务:web前端
部门:技术部进程已结束,退出代码为 0
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。