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