欢迎您访问365答案网,请分享给你的朋友!
生活常识 学习资料

Java课程实验——实验3

时间:2023-06-07

目录

1、

2、

3、

4、

5、

6、

7、

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


1、

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

测试类:

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;//这个需要加上 }}

2、

实验题目: 

(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); }}

3、

实验题目:

(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(); }}

4、

实验题目:

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

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)); }}

5、

实验题目:

(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并不发生改变。 

6、

实验题目:

(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(); }}

 

7、

实验题目:

(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 © 2016-2020 www.365daan.com All Rights Reserved. 365答案网 版权所有 备案号:

部分内容来自互联网,版权归原作者所有,如有冒犯请联系我们,我们将在三个工作时内妥善处理。