实验目的
- 掌握Java语言中类的定义、对象的创建、对象引用方法。
- 初步了解面向对象设计方法。
实验学时
实验内容
1.设计一个自动铅笔类AutoPencil,有1个属性boolean penPoint(笔尖是否伸出),有4个函数:
(1)构造函数AotoPencil(),将penPoint置为false
(2)按压操作函数void knock(),将penPoint置反
(3)获取笔尖状态函数 boollean getPenPoint()
(4)main函数
创建对象并对实例对象进行按压操作,显示笔尖的状态。
实验代码:
package test5;
public class exp1 {
public static void main(String[] args) {
// TODO Auto-generated method stub
AotoPencil p=new AotoPencil();
p.knock();
System.out.println("笔尖状态:"+p.penPoint);
}
}
class AotoPencil{
boolean penPoint=false;
public void knock() {
penPoint=true;
}
public boolean getPenPoint() {
return penPoint;
}
}
2.设计一个汽车类Car,有2个属性车主owner和油量oil,有7个函数:
(1)构造函数Car(String owner,double oil)
(2)构造函数Car(String owner),油量置为0
(3)加油操作函数void addOil(double oil)
(4)行驶操作函数void drive(int distance)
假设每100公里的耗油量为定值(自己设置),根据行驶的公里数更新油量。
(5)获得车主信息函数String getOwner()
(6)获得油量函数double getOil()
(7)main函数
创建对象并对实例对象进行加油、行驶操作,显示车主、油量。
实验代码:
package test5;
public class exp2 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Car p=new Car("张三",10);
p.addOil(10);
p.drive(400);
System.out.println("车主:"+p.getOwner()+",油量:"+p.getOil());
Car a=new Car("小明");
a.addOil(30);
a.drive(600);
System.out.println("车主:"+a.getOwner()+",油量:"+a.getOil());
}
}
class Car{
private String owner;
private double oil;
Car(String owner,double oil){
this.owner=owner;
this.oil=oil;
}
Car(String owner){
this.owner=owner;
oil=0;
}
void addOil(double oil){
this.oil+=oil;
}
void drive(int distance){
oil=oil-distance/100.0*3;
}
String getOwner(){
return owner;
}
double getOil(){
return oil;
}
}
3. 编写Java程序模拟简单的计算器。 定义名为Number的类,其中有两个私有的整型数据成员x和y。有5个函数:
(1)构造函数Number(int x,int y)
(2)加法运算函数 int addition( )
(3)减法运算函数 int subtration( )
(4)乘法运算函数 int multiplication( )
(5)除法运算函数 int division( )
另外编写一个测试类,对Number类进行测试。
实验代码:
package test5;
public class exp3 {
public static void main(String[] args) {
// TODO Auto-generated method stub
int a=10,b=5;
Number s=new Number(a,b);
System.out.println("x+y="+s.addition());
System.out.println("x-y="+s.subtration());
System.out.println("x*y="+s.multiplication());
System.out.println("x/y="+s.division());
}
}
class Number{
private int x;
private int y;
Number(int x,int y){
this.x=x;
this.y=y;
}
public int addition(){
return x+y;
}
public int subtration(){
return x-y;
}
public int multiplication(){
return x*y;
}
public int division(){
return x/y;
}
}
4. 定义长方形类Rectangle,含:
(1)属性
int width;
int height;
(2)方法
Rectangle():宽、高默认值为1;
Rectangle(int val):宽、高均为参数值;
Rectangle(int width,int height):
int getSquare():计算面积;
int getPerimeter():计算周长;
另外编写测试类进行测试。
实验代码:
package test5;
public class exp4 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Rectangle a=new Rectangle();
System.out.println("宽、高的默认值分别为:"+a.width+"、"+a.height);
Rectangle b=new Rectangle(7);
System.out.println("宽、高均为参数值:"+b.width+"、"+b.height);
int x=10,y=5;
System.out.println("当宽为:"+x+",高为:"+y+"的时候");
Rectangle p=new Rectangle(x,y);
System.out.println("面积="+p.getSquare());
System.out.println("周长="+p.getPerimeter());
}
}
class Rectangle{
int width;
int height;
Rectangle(){
width=1;
height=1;
}
Rectangle(int val){
width=val;
height=val;
}
Rectangle(int width,int height){
this.width=width;
this.height=height;
}
int getSquare(){
return width*height;
}
int getPerimeter(){
return 2*(width+height);
}
}
5. 定义一个时间类MyTime,有三个属性hour,minute,second。为MyTime类定义构造方法,以便创建对象时初始化成员变量。除了构造函数外,还要创建以下方法:
(1)nextSecond( ):时间经过1秒
(2)nextMinute( ):时间经过1分
(3)nextHour( ):时间经过1小时
(4)prevSecond( ):前1秒
(5)prevMinute( ):前1分
(6)prevHour( ):前一小时
(7)display( ):以HH:MM:SS格式显示时间
另外编写测试类,进行测试。
提示:格式输出要用到Formatter类。
import java.util.Formatter;//格式输出类
public class MyTime {
void display( ){
//先创建格式输出对象
Formatter f = new Formatter(System.out);
//format方法按照格式输出
f.format(“%02d:%02d:%02d\n”,hour,minute,second);
}
}
实验代码:
package test5;
import java.util.Formatter;
public class exp5 {
public static void main(String[] args) {
// TODO Auto-generated method stub
MyTime a=new MyTime(8,30,29);
System.out.print("原始时间:");
a.display();
System.out.print("后一秒:");
a.nextSecond();
a.display();
System.out.print("前一秒:");
a.prevSecond();
a.display();
System.out.print("前一分钟:");
a.prevMinute();
a.display();
System.out.print("后一分钟:");
a.nextMinute();
a.display();
System.out.print("前一小时:");
a.prevHour();
a.display();
System.out.print("后一小时:");
a.nextHour();
a.display();
}
}
class MyTime{
int hour;
int minute;
int second;
MyTime(int x,int y,int z){
hour=x;
minute=y;
second=z;
}
void nextSecond(){
second+=1;
}
void nextMinute(){
minute+=1;
}
void nextHour(){
hour+=1;
}
void prevSecond() {
second-=1;
}
void prevMinute() {
minute-=1;
}
void prevHour() {
hour-=1;
}
void display() {
Formatter f=new Formatter(System.out);
f.format("%02d:%02d:%02d\n",hour,minute,second);
}
}
6. 编写程序使用复数类Complex验证两个复数 2+2i 和3+3i 相加产生一个新的复数5+5i 。复数类Complex满足如下要求:
(1)属性
int realPart :复数的实部;
int imaginPart:复数的虚部;
(2)方法
Complex( ) : 构造方法,将复数的实部和虚部都置0;
Complex( int r , int i ) :
Complex complexAdd(Complex a) : 将当前复数对象与形参复数对象相加,所得的结 果仍是一个复数值,返回给此方法的调用者。
String toString( ) : 把当前复数对象的实部、虚部组合成 a+bi 的字符串形式,其中 a 和 b分别为实部和虚部的数据。
另外编写一个测试类Test,对Complex类进行测试。
实验代码:
package test5;
public class exp6 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Complex a=new Complex(2,2);
System.out.println(a.toString());
Complex b=new Complex(3,3);
System.out.println(b.toString());
Complex c=a.complexAdd(b);
System.out.println("新复数:"+c.toString());
}
}
class Complex{
int realPart;
int imaginPart;
Complex(){
realPart=0;
imaginPart=0;
}
Complex(int r,int i){
realPart=r;
imaginPart=i;
}
Complex complexAdd(Complex a) {
Complex b=new Complex();
b.realPart=a.realPart+realPart;
b.imaginPart=a.imaginPart+imaginPart;
return b;
}
public String toString() {
return (realPart+"+"+imaginPart+"i");
}
}