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