当前位置:   article > 正文

上机实验3-2 Java面向对象编程(二)_在主类的main方法的最后增添下列代码,并解释运行效果。 family lisifamily= ne

在主类的main方法的最后增添下列代码,并解释运行效果。 family lisifamily= new f

实验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. }

本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/w/数据科学创新者/article/detail/61482
推荐阅读
相关标签
  

闽ICP备14008679号