Java实验2

  • 格式:pdf
  • 大小:96.52 KB
  • 文档页数:6

Java实验2

验2

类和对象

⼀、实验⽬的:1、学习定义类和使⽤类创建对象。

2、掌握对象变量和普通变量的区别,学习掌握使⽤对象调⽤其成员的⽅法。

3、学习掌握类的构造⽅法。

4、学习掌握给⽅法传递对象。

5、学习掌握类的静态变量和静态⽅法。

⼆、实验任务:1、创建Java程序,学习类的定义、使⽤类创建对象、通过对象调⽤其成员、

类的构造⽅法的作⽤、如何给⽅法传递对象、掌握静态变量、静态⽅法

的⽤法。程序要求:

(1)⾸先创建Circle类表⽰平⾯上的圆,要求该类具备构造⽅法,以初始化表⽰半径的私有数据成员radius;具备求圆⾯积的⽅法;

还要具备⼀个静态数据成员numOfObjects,⽤来统计程序运⾏过

程中创建圆对象的个数。

(2)创建⼀个静态⽅法public static void printCircle(Circle c),功能是输出参数圆对象c的相关信息,包括半径和⾯积的值。(不是Circle

的成员⽅法)

(3)程序运⾏中创建2个以上的圆对象,分别输出相关信息,并统计输出对象的数⽬。2、创建Java程序,进⼀步学习上述的内容以及关键字this的使⽤和类抽象

的概念。程序要求:

(1)⾸先创建有理数类Rational,该类包含构造⽅法和加、减、乘、除⽅法。

(2)程序主⽅法中创建两个有理数对象,分别进⾏加、减、乘、除运算,并输出运算结果。

三、实验步骤:1、按照任务1的要求创建⼀个表⽰圆形的Circle类。

2、按照任务1的要求创建⼀个类TestInstanceAndClassVariable,其中包含静

态⽅法public static void printCircle(Circle c)和程序的主⽅法main,在main

⽅法中创建两个或多个Circle对象,调⽤printCircle(Circle c)⽅法显⽰每

个Circle对象的相关信息,最后统计程序中所有创建的Circle类对象的

数⽬。

实验代码:public class TestInstanceAndClassVariable{

public static void main(String[]args) {Circle circle1=new Circle();

System.out.println("Beforecreatingcircle2");

System.out.print("circle1is:");

printCircle(circle1);

Circle circle2=new Circle(5);

circle1.setRadius(9);

System.out.println("\nAftercreatingcircle2andmodifying"+"circle1' sradiusto9");

System.out.print("circle1is:");

printCircle(circle1);

System.out.print("circle2is:");

printCircle(circle2);

}

public static void printCircle(Circle c){

System.out.println("radius("+c.getRadius()+")andnumberofCircleobject s("+c.getNumOfObjects()+")");

}

}

class Circle{

private double radius;

private static int numOfObjects=0;

public Circle(){

radius=1.0;

numOfObjects++;

}

public Circle(double r){

radius=r;

numOfObjects++;

}

public double getRadius(){

return radius;

}

public void setRadius(double newRadius){

radius=newRadius;

}

public static int getNumOfObjects(){

return numOfObjects;}

public double findArea(){

return radius*radius*Math.PI;

}

}实验结果:

3、按照任务2的要求创建⼀个有理数类Rational,应包含2个私有的长整型

数据成员numerator和denominator分别存储⼀个有理数的分⼦和分母;

该类应包含不带参数的构造⽅法,和带参数的构造⽅法。其中不带参数

的构造⽅法把有理数的分⼦和分母初始化为0和1;带参数的构造⽅法中

应对该有理数进⾏约分,为此需为该类创建⼀个成员⽅法private longgcd(long n, long d);该⽅法返回分⼦和分母的最⼤公约数。

4、为理数类Rational创建四个成员⽅法分别实现2个有理数的加、减、乘、

除运算,四个⽅法的⽅法签名如下:public Rational add(Rational secondRational);

public Rational subtract(Rational secondRational);

public Rational multiply(Rational secondRational);

public Rational divide(Rational secondRational);

5、为Rational类改写toString()⽅法,该⽅法改写后的功能是:以分数的形

式输出⼀个有理数。例如:2/36、创建⼀个程序TestRationalClass,该类中分别创建2个Rational类的对象

r1和r2,计算并显⽰它们的和、差、积、商。程序运⾏的结果应如下图

所⽰:

实验代码:public class Rational

{

// Data fields for numerator and denominator

private long numerator = 0;private long denominator = 1;

// Default constructor

public Rational()

{

this(0, 1);

}

// Construct a rational with specified numerator and denominator public Rational(long numerator, long denominator)

{

long gcd = gcd(numerator, denominator);

this.numerator = numerator/gcd;

this.denominator = denominator/gcd;

}

// Find GCD of two numbers

private long gcd(long n, long d)

{

long t1 = Math.abs(n);

long t2 = Math.abs(d);

long remainder = t1%t2;

while (remainder != 0)

{

t1 = t2;

t2 = remainder;

remainder = t1%t2;

}

return t2;

}

// Getter method for numerator

public long getNumerator()

{

return numerator;

}

public long getDenominator()

{

return denominator;

}// Add a rational number to this rational

public Rational add(Rational secondRational)

{

long n = numerator*secondRational.getDenominator() +

denominator*secondRational.getNumerator();

long d = denominator*secondRational.getDenominator();

return new Rational(n, d);

}

// Subtract a rational number from this rational

public Rational subtract(Rational secondRational)

{

long n = numerator*secondRational.getDenominator()

- denominator*secondRational.getNumerator();

long d = denominator*secondRational.getDenominator();

return new Rational(n, d);

}

// Multiply a rational number to this rational

public Rational multiply(Rational secondRational)

long n = numerator*secondRational.getNumerator();

long d = denominator*secondRational.getDenominator();

return new Rational(n, d);

}

// Divide a rational number from this rational

public Rational divide(Rational secondRational)

throws RuntimeException

{

if (secondRational.getNumerator() == 0)

throw new RuntimeException("Denominator cannot be zero");

long n = numerator*secondRational.getDenominator();

long d = denominator*secondRational.getNumerator();

return new Rational(n, d);

}

// Override the toString() method

public String toString()

{