上机实验3-2 Java面向对象编程(二)

简介: 上机实验3-2 Java面向对象编程(二)

实验1 家中的电视

一、实验目的

成员变量也可能是引用类型,通过实验让学生掌握对象的组合以及参数传递

二、实验内容

编写一个Java应用程序,模拟家中买了一台电视机,家庭将电视机作为自己的一个成员。具体要求如下:

1、有三个源文件:

            TV.java 负责创建电视类TV类

            Family.java 负责创建家庭类Famliy类

            MainClass.java 测试的主类

2、在主类的main()方法中首先使用TV类创建一个对象haierTV,然后使用Family类创建对象ZhangSanFamily,并将先前的TV类的对象实例haierTV的引用传递给ZhangSanFamily对象的成员变量homeTV.

三、程序代码

TV.java

1. public class TV {
2.  int channel;   //电视频道
3. void setChannel(int m) {
4. if(m>=1){
5.           channel=m;
6.        }
7. }
8. int getChannel(){
9. return channel;
10.      }
11. void showProgram(){
12. switch(channel) {
13. case 1 : System.out.println("综合频道");
14. break;
15. case 2 : System.out.println("经济频道");
16. break;
17. case 3 : System.out.println("文艺频道");
18. break;
19. case 4 : System.out.println("国际频道");
20. break; 
21. case 5 : System.out.println("体育频道");
22. break;
23. default : System.out.println("不能收看"+channel+"频道");
24.         } 
25.      }
26.  }

Family.java

1. public class Family {
2.  TV homeTV;
3. void buyTV(TV tv) {
4.     homeTV=tv;//【代码1】            //将参数tv赋值给homeTV
5.     }
6. void remoteControl(int m) {
7.        homeTV.setChannel(m);  
8.     }
9. void seeTV() {
10.        homeTV.showProgram();  //homeTV调用showProgram()方法
11.     }
12. }

MainClass.java

1. public class MainClass {
2.  public static void main(String args[]) {
3.         TV haierTV = new TV(); 
4.         Family lisiFamily=new Family();
5.         haierTV.setChannel(5);
6.         System.out.println("haierTV的频道是"+haierTV.getChannel());
7.         lisiFamily.buyTV(haierTV);
8.         System.out.println("lisiFamily开始看电视节目");
9.         lisiFamily.seeTV();
10.          haierTV.setChannel(5);//【代码2】 //haierTV调用setChannel(int m),并向参数m传递5
11.          System.out.println("haierTV的频道是"+haierTV.getChannel());
12.          Family zhangSanFamily = new Family();
13.          zhangSanFamily.buyTV(haierTV);//【代码3】//zhangSanFamily调用void buyTV(TV tv)方法,并将haierTV传递给参数TV
14.          System.out.println("zhangSanFamily开始看电视节目");
15.          zhangSanFamily.seeTV();
16.          int m=2; 
17.          System.out.println("hangSanFamily将电视更换到"+m+"频道");
18.          zhangSanFamily.remoteControl(m);
19.          System.out.println("haierTV的频道是"+haierTV.getChannel());
20.          System.out.println("hangSanFamily再看电视节目");
21.          zhangSanFamily.seeTV(); 
22.   }
23. }

实验2 课后实训

求解一元二次方程或二元一次方程

1.设计一个用于求解任意一元二次方程的QuadraticEquation类

1. public class QuadraticEquation {
2. private int a,b,c;//私有字段
3. public QuadraticEquation(int a,int b,int c) {
4.  this.a=a;
5.  this.b=b;
6.  this.c=c;
7. }
8. public int getDiscriminant() {//计算判别式值的方法
9.  return b*b-4*a*c;
10. }
11. public double getRoot1() {//计算正实根的方法
12.   return(-b+Math.sqrt(b*b-4*a*c))/(2*a);
13. }
14. public double getRoot2() {//计算负实根的方法
15.   return(-b-Math.sqrt(b*b-4*a*c))/(2*a);
16. }
17. }

2.设计一个用于求解任意二元一次方程的LinearEquation类

1. public class LinearEquation {
2. private int a,b,c,d,e,f;//定义6个私有字段
3. LinearEquation(int a,int b,int c,int d,int e,int f){
4.  //创建类的构造方法
5.  this.a=a;this.b=b;this.c=c;this.d=d;this.e=e;this.f=f;
6. }//用于读取6个字段值的get()方法,无set()方法表示6个字段为只读字段
7. public int getA() {
8.  return a;
9. }
10. public int getB() {
11.   return b;
12. }
13. public int getC() {
14.   return c;
15. }
16. public int getD() {
17.   return d;
18. }
19. public int getE() {
20.   return e;
21. }
22. public int getF() {
23.   return f;
24. }
25. public boolean isSolvable() {//判别式方法,测试方程组是否有解
26.   return a*d-b*c!=0;
27. }
28. public double getX() {//计算方程组的解(x)
29.   return(double)(c*e-b*f)/(double)(a*e-b*d);
30. }
31. public double getY() {//计算方程组的解(y)
32.   return(double)(a*f-c*d)/(double)(a*e-b*d);
33. }
34. }

3.测试代码检验设计结果是否正确

1. public class SX1 {
2. public static void main(String[] args) {
3.  //调用构造函数创建对象le,通过其构造方法为6个系数字段赋值
4.  LinearEquation le=new LinearEquation(1,2,3,4,5,6);
5.  if(le.isSolvable())//调用判别式,判断方程组是否有解
6.    System.out.println("x="+le.getX()+", y="+le.getY());//显示方程组的解
7.  else
8.    System.out.println("方程无解");
9. }
10. }

4.设计用户交互界面及程序整合

1. import java.util.*;
2. public class SX2 {
3. public static void main(String[] args) {
4.  Scanner val=new Scanner(System.in);
5.  while(true) {//选择3的时候退出
6.    System.out.println("一元二次方程--1 二元一次方程--2 退出--3 请选择:");
7.    switch(val.nextInt()) {
8.    case 1://处理一元二次方程
9.      System.out.println("请输入一元二次方程的3个系数:");
10.       QuadraticEquation qe=new QuadraticEquation(val.nextInt(),val.nextInt(),val.nextInt());
11.       if(qe.getDiscriminant()>=0)
12.         System.out.println("x1="+qe.getRoot1()+", x2="+qe.getRoot2());
13.       else
14.         System.out.println("方程无实根");
15.       break;
16.     case 2://处理二元一次方程
17.       System.out.println("请输入二元一次方程的6个系数:");
18.       LinearEquation le=new LinearEquation(val.nextInt(),val.nextInt(),val.nextInt(),val.nextInt(),val.nextInt(),val.nextInt());
19.       if(le.isSolvable())
20.         System.out.println("x="+le.getX()+", y="+le.getY());
21.       else
22.         System.out.println("方程无解");
23.       break;
24.     case 3:
25.       System.out.println("bye!");
26.       return;
27.     }
28.   }
29. }
30. }

简单用户管理的实现

1.编写主方法的代码

1. import java.util.*;
2. public class SX3_2 {//主类
3. public static void main(String[] args) {//主方法
4.  Scanner val = new Scanner(System.in);
5.  System.out.println("1--登录  2--注册新用户,请选择:");
6.  switch(val.nextInt()) {
7.  case 1://登录
8.    System.out.println("输入用户名和密码:");
9.    Users user = new Users(val.next(),val.next());//创建User类对象user
10.     if(user.checkUser()) {//checkUser()方法返回ture
11.       System.out.println("登录成功");
12.       System.out.print("1--修改密码  2--退出,请选择:");
13.       if(val.nextInt()==1) {//用户选择了"修改密码"
14.         System.out.print("输入新密码");
15.         System.out.println(user.editUser(val.next()));
16.       }
17.       else//用户选择了“退出”
18.         System.out.println("bye!");
19.         }
20.     else//登录失败
21.       System.out.println("用户名和密码错误");
22.       break;
23.       case 2://用户选择了“注册新用户”
24.         System.out.print("输入新的用户名和密码:");
25.         user = new Users(val.next(),val.next());
26.         System.out.println(user.addUser());
27.       break;
28.       default:
29.         System.out.println("菜单选择错误");
30.     }
31.     val.close();
32.   }
33. }

2.创建Users类

1. import sky.mytools.FileTools;
2. public class Users {//创建Users类
3.    private String name,userData;//封装私有字段
4.    private final String fileName="e:\\users.txt";
5.    //私有的final类型字段,用于储存数据文件名
6.    private FileTools ft=new FileTools();//声明一个FileTool类对象ft
7.    public Users(String n,String p){//User类的构造方法
8.      name=n;
9.      userData=n+""+p;//将用户名和密码组合成一个用空格分割的字符串
10.     }
11.     public boolean checkUser(){//用于检测用户是否合法的方法
12.       return !ft.query(fileName,userData).equals("keyIsNoFound");
13.     }
14.     public String addUser(){//用于实现新用户注册的方法
15.       if(ft.query(fileName,userData).equals("keyIsNoFound"))
16.         return ft.appendToFile(fileName,userData);
17.       else
18.         return "要修改的数据已存在";
19.     }
20.     public String editUser(String newPwd){//用于修改密码的方法
21.       if(!ft.query(fileName,userData).equals("keyIsNoFound"))
22.         return ft.editFile(fileName,userData,name+""+ newPwd);
23.         else
24.           return "要修改的数据已存在";
25.     }
26. }
目录
相关文章
|
3月前
|
Java 开发者
在Java面向对象编程的广阔海洋中,多态犹如一股深邃的潜流,它推动着代码从单一走向多元,从僵化迈向灵活。
在Java面向对象编程的广阔海洋中,多态犹如一股深邃的潜流,它推动着代码从单一走向多元,从僵化迈向灵活。
41 7
|
3月前
|
Java 开发者
那些年,我们一同踏入Java编程的大门,多态,这个充满魔法的名字,曾无数次点亮我们探索面向对象编程的热情。
那些年,我们一同踏入Java编程的大门,多态,这个充满魔法的名字,曾无数次点亮我们探索面向对象编程的热情。
48 5
|
3月前
|
Java 程序员
Java中的继承和多态:理解面向对象编程的核心概念
【8月更文挑战第22天】在Java的世界中,继承和多态不仅仅是编程技巧,它们是构建可维护、可扩展软件架构的基石。通过本文,我们将深入探讨这两个概念,并揭示它们如何共同作用于面向对象编程(OOP)的实践之中。你将了解继承如何简化代码重用,以及多态如何为程序提供灵活性和扩展性。让我们启程,探索Java语言中这些强大特性的秘密。
|
1月前
|
算法 搜索推荐 Java
java 后端 使用 Graphics2D 制作海报,画echarts图,带工具类,各种细节:如头像切割成圆形,文字换行算法(完美实验success),解决画上文字、图片后不清晰问题
这篇文章介绍了如何使用Java后端技术,结合Graphics2D和Echarts等工具,生成包含个性化信息和图表的海报,并提供了详细的代码实现和GitHub项目链接。
103 0
java 后端 使用 Graphics2D 制作海报,画echarts图,带工具类,各种细节:如头像切割成圆形,文字换行算法(完美实验success),解决画上文字、图片后不清晰问题
|
3月前
|
消息中间件 Java Kafka
【Azure 事件中心】在微软云中国区 (Mooncake) 上实验以Apache Kafka协议方式发送/接受Event Hubs消息 (Java版)
【Azure 事件中心】在微软云中国区 (Mooncake) 上实验以Apache Kafka协议方式发送/接受Event Hubs消息 (Java版)
|
3月前
|
存储 前端开发 JavaScript
【前端学java】面向对象编程基础-类的使用(4)
【8月更文挑战第9天】面向对象编程基础-类的使用
19 0
【前端学java】面向对象编程基础-类的使用(4)
|
3月前
|
数据采集 人工智能 监控
【Azure 应用程序见解】Application Insights Java Agent 3.1.0的使用实验,通过修改单个URL的采样率来减少请求及依赖项的数据采集
【Azure 应用程序见解】Application Insights Java Agent 3.1.0的使用实验,通过修改单个URL的采样率来减少请求及依赖项的数据采集
|
3月前
|
Java 程序员 开发者
Java的面向对象编程:从基础到深入
【8月更文挑战第21天】在本文中,我们将探讨Java的面向对象编程(OOP)的核心概念,包括类、对象、继承、多态和封装。我们将通过实例和比喻,以通俗易懂的方式,深入理解这些概念的内涵和意义,以及它们如何影响我们的编程思维和实践。无论你是初学者还是有经验的开发者,这篇文章都将帮助你更深入地理解Java的OOP,并启发你思考如何在你的项目中应用这些概念。
|
4月前
|
Java API 项目管理
Java中的函数式编程与传统面向对象编程对比
Java中的函数式编程与传统面向对象编程对比
|
4月前
|
Java 开发者
Java中的面向对象编程思想
Java中的面向对象编程思想