实验1 类的结构
一、实验目的
1、掌握类的结构,能够创建类
2、掌握对象的创建
3、掌握成员变量、成员方法和构造方法的创建及调用
二、实验内容
1、编写一个教师类Teacher,成员变量有姓名和年龄,成员方法有授课和吃饭。
1. public class Teacher { 2. private String name; 3. private int age; 4. public Teacher(String name, int age) { 5. this.name = name; 6. if (age<=0) 7. {age=-age;} 8. this.age = age; 9. } 10. public void setName(String name) { 11. this.name = name; 12. } 13. public void setAge(int age) { 14. this.age = age; 15. } 16. public String getName() { 17. return name; 18. } 19. public int getAge() { 20. return age; 21. } 22. public void teach(){ 23. System.out.println(name+"老师在授课"); 24. } 25. public void eat(){ 26. System.out.println(name+"老师在吃饭"); 27. } 28. }
并编写测试类创建教师类对象,输出对象的成员变量,并调用成员方法授课和吃饭。
1. public class Teach { 2. public static void main(String[] args) { 3. System.out.println("以下是教师的姓名和年龄:"); 4. Teacher teacher = new Teacher("青玉案",24); 5. System.out.println("姓名为:"+teacher.getName()); 6. System.out.println("年龄为:"+teacher.getAge()); 7. System.out.println("以下是教师的成员方法:"); 8. teacher.teach(); 9. teacher.eat(); 10. } 11. }
2、编写一个课程类Course,包括课程编号,课程名称和学分信息;设计两个成员方法,一个用来修改课程的学分信息,一个方法输出课程的所有信息;给出该类的构造方法,包括一个无参构造方法和一个三个参数的构造方法。
1. public class Course { 2. private int CNo; 3. private String CN; 4. private double SC; 5. public Course(){} 6. public Course(int CNo,String CN,double Score){ 7. this.CNo=CNo; 8. this.CN=CN; 9. this.SC=Score; 10. } 11. public void setCNo(int CNo){ 12. this.CNo=CNo; 13. } 14. public void setCN(String CN){ 15. this.CN=CN; 16. } 17. public void setScore(double Score){ 18. this.SC=Score; 19. } 20. public int getCNo() { 21. return CNo; 22. } 23. public String getCN() { 24. return CN; 25. } 26. public double getSC() { 27. return SC; 28. } 29. public void alSC(){ 30. if(SC<=4) 31. System.out.println("学分�?"+SC); 32. else 33. {while(SC>4){SC--;} 34. System.out.println("学分修改后为"+SC);} 35. } 36. public void outPut(){ 37. System.out.println("课程信息"+CNo+","+CN+","+SC); 38. } 39. }
并编写测试类通过不同的构造方法创建该类对象和调用该类方法。
1. public class Cour { 2. public static void main(String[] args){ 3. Course course=new Course(); 4. course.setCNo(126316); 5. course.setCN("Java程序设计"); 6. course.setScore(5); 7. System.out.println("编号:"+course.getCNo()); 8. System.out.println("名称:"+course.getCN()); 9. System.out.println("学分:"+course.getSC()); 10. course.alSC(); 11. course.outPut(); 12. } 13. }
实验2 机动车
一、实验目的
通过实验让学生使用类来封装对象的属性和功能
二、实验内容
编写一个Java应用程序,改程序中有两个类:Vehicle(用于描述机动车)和User(主类)。具体要求如下:
1、Vehicle类有一个double类型的变量speed,用于描述机动车的速度;一个int类型的变量power,用于描述机动车的功率。
2、Vehicle类定义了一个speedUp(int s)方法,体现机动车有加速功能;定义了一个speedDown(int d)方法,体现机动车有减速功能;定义了一个setPower(int p)方法,用于设置机动车的功率;定义了一个getPower()方法,用于获取机动车的功率。
三、程序代码
Vehicle.java文件内容
1. public class Vehicle { 2. double speed;//声明double型变量speed,刻画速度 3. int power;//声明int型变量power,刻画功率 4. void speedUp(int s) { 5. speed=s+speed;} //将参数s的值与成员变量speed的和赋值给成员变量 6. void speedDown(int d) { 7. speed=speed-d;} //将成员变量speed与参数d的差赋值给成员变量speed 8. void setPower(int p) { 9. power=p;}//将参数p的值赋值给成员变量power 10. int getPower() { 11. return power;}//返回成员变量power的值 12. double getSpeed() { 13. return speed; 14. } 15. }
User.java文件内容
1. public class User { 2. public static void main(String args[]) { 3. Vehicle car1,car2; 4. car1=new Vehicle();//使用new 运算符和默认的构造方法创建对象car1 5. car1.setPower(128); 6. System.out.println("car1的功率为:"+car1.getPower()); 7. car1.speedUp(80);//car1调用speedUp方法将自己的speed的值增加80 8. System.out.println("car1当前加速为:"+car1.getSpeed()); 9. car1.speedDown(10); 10. System.out.println("car1当前减速为:"+car1.getSpeed()); 11. car2=new Vehicle();//使用new 运算符和默认的构造方法创建对象car2 12. car2.setPower(76); 13. System.out.println("car2的功率为:"+car2.getPower()); 14. car2.speedUp(80);//car2调用speedUp方法将自己的speed的值增加80 15. System.out.println("car2当前加速为:"+car2.getSpeed()); 16. car2.speedDown(20); 17. System.out.println("car2当前减速为:"+car2.getSpeed()); 18. } 19. }
四、实验指导
1、创建一个对象,会为对象在栈内存创建引用对象的空间,并在堆内存中为成员创建相应的内存空间。
2、空对象不能使用成员变量和方法,否则运行时会出现异常:NullPointerException。
3、实验完成后的改进
1)改进speedUp()方法,使得Vehicle类的对象在加速时不能将速度speed值超过200;
2)改进speedDown()方法,使得Vehicle类的对象在减速时不能将速度speed值小于0;
3)增加一个刹车方法void brake(),使得Vehicle类的对象调用它会将speed值变成0。
实验3 设计一个小学生加法练习程序
一、实验目的
1、熟练掌握类的字段、构造方法和成员方法的定义以及在程序中创建类的对象,访问类的成员的编程技巧
2、理解封装的概念和重载含义
二、实验内容
1、每次练习出5道题,也可以在用户输入0后,强行退出程序
2、程序运行显示题目,要求[1-100)之间的随机整数
3、用户输入答案,正确打√,错误打×
三、程序代码
1. import java.util.Scanner;//导入Scanner 2. class Exercise {//声明自定义Exercise类,与主类并列,使用缺省修饰符 3. private int num1,num2;//封装的私有字段成员 4. Exercise(){//类的构造方法,使用缺省修饰符 5. //使用数学random(),随机输入 6. num1=(int)(1+Math.random()*100); 7. num2=(int)(1+Math.random()*100); 8. } 9. void show(){//用于显示一个算式的show()方法 10. System.out.print(num1+"+"+num2+"="); 11. } 12. int getResult(){ 13. //用于获取正确答案的getResult()方法 14. return num1+num2; 15. } 16. } 17. public class 加法练习{ 18. public static void main(String[] args){//主方法 19. Scanner val=new Scanner(System.in); 20. int i,right=0;//i循环变量,right为做对的题数 21. long start=System.currentTimeMillis();//记录开始做题的时间 22. for(i=1;i<=10;i++)//每次练习3道题 23. { 24. Exercise exe=new Exercise(); 25. exe.show();//调用对象的show()方法显示一个算式 26. int sum=val.nextInt();//接受用户的键盘输入 27. if(sum==0) //用户输入0,退出程序 28. {System.out.println("用户退出程序"); 29. break; 30. } 31. if(exe.getResult()==sum)//调用对象的getResult()方法获取答案并比较答案是否正确 32. { 33. System.out.println("v"); 34. right+=1;//答案正确,继续进行 35. } 36. else 37. { 38. System.out.println("×");//答案错误 39. } 40. } 41. long end=System.currentTimeMillis();//记录结束时间 42. System.out.println("共出题:"+(i-1)+",做对:"+right+",用时:"+(end-start)/1000+"秒"); 43. val.close();//关闭Scanner对象 44. } 45. 46. }
实验4 方法及方法重载应用
一、实验目的
1、掌握类中的方法的定义
2、掌握重载方法的定义及使用
二、实验内容
创建一个程序,根据yoghurt选择及输入的参数,调用重载方法,分别计圆的面积、圆柱体体积和圆柱体表面积。
1、创建一个area方法,接收一个double类型的参数,返回double类型圆的面积
2、创建area方法的重载方法,接收两个float类型的参数,返回double类型的圆柱体体积
3、创建area方法的重载方法,接收两个double类型的参数,返回一个double类型的圆柱体表面积。
1. import java.util.Scanner; 2. public class Yoghurt { 3. public static void main(String args[]){ 4. Scanner val=new Scanner(System.in);//显示供选择菜单 5. System.out.println("圆的面积--1 圆柱体积--2 圆柱表面积--3"); 6. int n=val.nextInt(); 7. switch(n){ 8. case 1://用户选择了1 9. System.out.println("请输入圆的半径r1"); 10. double r1=val.nextDouble();//读取圆半径 11. double s1=area(r1);//调用area()方法计算圆面积 12. System.out.println("圆的面积为:"+String.format("%.2f", s1)); 13. break;//输出面积 14. case 2://用户选择了2 15. System.out.println("请输入圆柱的半径r2和高h1"); 16. float r2=val.nextFloat();//读取半径和高 17. float h2=val.nextFloat(); 18. double v=area(r2,h2);//调用area()方法计算圆柱体积 19. System.out.println("圆柱体积为:"+String.format("%.2f", v)); 20. break; 21. case 3://用户选择了3 22. System.out.println("请输入圆柱的半径r3和高h2"); 23. double r3=val.nextDouble();//读取半径和高 24. double h3=val.nextDouble(); 25. double s2=area(r3,h3);//调用area()方法计算圆柱表面积 26. System.out.println("圆柱体积为:"+String.format("%.2f", s2)); 27. break; 28. } 29. val.close();//关闭Scanner对象 30. } 31. public static double area(double r){//area()方法计算圆面积 32. return r*r*Math.PI;}//r为半径 33. //area()方法的重载形式,计算圆柱体积 34. public static double area(float r,float h){//r为半径,h为圆柱的高 35. return Math.PI*r*r*h;} 36. //area()方法的重载形式,计算圆柱表面积 37. public static double area(double r,double h){ 38. return 2*Math.PI*r*h+2*Math.PI*r*r; 39. } 40. }