当前位置:文档之家› Java实验2

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 long gcd(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 denominatorprivate long numerator = 0;private long denominator = 1;// Default constructorpublic 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 numbersprivate 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 numeratorpublic long getNumerator(){return numerator;}public long getDenominator(){return denominator;}// Add a rational number to this rationalpublic 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 rationalpublic 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 rationalpublic 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 rationalpublic 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() methodpublic String toString(){if (denominator == 1)return numerator + "";elsereturn numerator + "/" + denominator;}}public class TestRationalClass{// Main methodpublic static void main(String[] args){// Create and initialize two rational numbers r1 and r2.Rational r1 = new Rational(4, 2);Rational r2 = new Rational(2, 3);// Display resultsSystem.out.println(r1.toString() + " + " + r2.toString() + " = " + (r1.add(r2)).toString());System.out.println(r1.toString() + " - " + r2.toString() + " = " + (r1.subtract(r2)).toString());System.out.println(r1.toString() + " * " + r2.toString() + " = " + (r1.multiply(r2)).toString());System.out.println(r1.toString() + " / " + r2.toString() + " = " + (r1.divide(r2)).toString());}实验截图:四、实验结果通过本次实验,我掌握了静态变量和静态方法的使用方法和使用环境。

相关主题