上机实验3-1 Java面向对象编程(一)

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

实验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. }
目录
相关文章
|
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中的面向对象编程思想