山东大学项目实训树莓派提升计划二期(七)对象和类

目录

实验二 对象和类

实验目的

实验内容

实验示例代码

实验设计的思路和考量

二次方程的测试用例设计

测试用例验证代码

定义类和创建对象

使用构造方法构造对象

熟练使用java库中的类

静态变量、常量和方法

可见性修饰符

this引用


实验二 对象和类

实验目的

如何定义类、创建对象、使用类与对象。

掌握类及成员的修饰符的运用。

掌握构造函数的使用、不同参数的构造函数如何使用。

如何定义方法、调用方法、他们的方法参数和返回值。

形式参数与实际参数的不同概念、他们之间如何结合。

局部变量和全局变量在使用中的影响。

实验内容

为二次方程式ax^2+bx+c=0设计一个名为QuadraticEquation的类。这个类包括:

  • 代表三个稀疏的私有数据域a、b、c。
  • 一个参数为a、b、c的构造方法。
  • a、b、c的三个get方法。
  • 一个名为getDiscriminant()的方法返回判别式,b^2-4ac。
  • 名为getRoot1()和getRoot2()的方法返回等式的两个根。
  • 名为test()的方法,返回值为void,如果判别式为正数,显示两个根,返回2;如果判别式为0,显示一个根,返回1;否则,显示“The equation has no roots.”,返回0。

实验示例代码

QuadraticEquation.java



public class QuadraticEquation {
    private double a,b,c;
    public QuadraticEquation(double a,double b,double c){
        this.a=a;
        this.b=b;
        this.c=c;
    }
    public double getA() {
        return a;
    }
    public double getB() {
        return b;
    }
    public double getC() {
        return c;
    }
    public double getDiscriminant(){
        return b*b-4*a*c;
    }
    public double getRoot1(){
        double delta=getDiscriminant();
        return ((-b)+Math.sqrt(delta))/(2*a);
    }
    public double getRoot2(){
        double delta=getDiscriminant();
        return ((-b)-Math.sqrt(delta))/(2*a);
    }
    public int test(){
        double delta=getDiscriminant();
        if(delta>0){
            System.out.println("Root1="+getRoot1()+";Root2="+getRoot2());
            return 2;
        }else if(delta<0){
            System.out.println("The equation has no roots.");
            return 0;
        }else {
            System.out.println("Root1=Root2="+getRoot1());
            return 1;
        }
    }
}

实验设计的思路和考量

二次方程的测试用例设计

文中需要验证的是delta大于、等于、小于0的三种情况,并分别得出各自的根的值。因此有以下三种测试用例

a

b

c

Root1

Root2

1

3

1

-0.381966

-2.61803

1

2

1

-1

1

2

3

无实根

测试用例验证代码

public static void quadraticEquation(){
        List<QuadraticEquation> list=new ArrayList<>();
        List<Integer> result=new ArrayList<>();
        QuadraticEquation q=new QuadraticEquation(1,3,1);
        list.add(q);
        result.add(2);
        q=new QuadraticEquation(5,88,13);
        list.add(q);
        result.add(2);
        q=new QuadraticEquation(1,2,1);
        list.add(q);
        result.add(1);
        q=new QuadraticEquation(25,-40,16);
        list.add(q);
        result.add(1);
        q=new QuadraticEquation(25,50,50);
        list.add(q);
        result.add(0);
        q=new QuadraticEquation(1,2,3);
        list.add(q);
        result.add(0);
        for(int i=0;i<list.size();i++){
            QuadraticEquation testQ=list.get(i);
            if(testQ.test()!=result.get(i)){
                System.out.println("测试用例:“a="+testQ.getA()+"、b="+testQ.getB()+"、c="+testQ.getC()+"”结果错误!");
                return;
            }else System.out.println("测试用例:“a="+testQ.getA()+"、b="+testQ.getB()+"、c="+testQ.getC()+"”结果正确,通过!");
        }
        System.out.println("测试用例全部通过!");

    }

定义类和创建对象

类是对象的定义,对象从类创建。因此,实验中需要对象有abc等数据域(属性),和各种方法,就需要在类中定义。需要注意的是,我们可以把两个类放在同一个java文件当中,但是一个文件中只能有一个类是公共(public)类,并且公共类必须与文件同名。运行这个文件时,Java运行系统会调用这个主类的main方法。

使用构造方法构造对象

构造方法有以下三个特殊性:

  1. 构造方法必须具备和所在类同样的名字。
  2. 构造方法没有返回值类型,甚至连void也没有。
  3. 构造方法是在创建一个对象使用new操作符时调用的。构造方法的作用是初始化对象。

构造方法也可以重载,但是他们要有不同的签名。这样更易于用不同的初始数据之来构造对象。

熟练使用java库中的类

在初级学习的阶段,java库中需要熟悉的是Date类、Random类、Math类、Point2D类等。随着学习的积累,会认识更多的java API。比如在本次实验中就会用到Math类中的sqrt()方法。

静态变量、常量和方法

静态变量被类中的所有对象所共享。静态方法不能访问类中的实例成员。

如果想让一个类的所有实例共享数据,就要使用静态变量。静态变量将变量值存储在一个公共的内存地址。因为他是公共的地址,所以如果一个对象修改了静态变量的值,那么同一个类的所有对象都会受到影响。Java支持静态方法和静态变量,无需创建类的实例就可以调用静态方法。

可见性修饰符

可见性修饰符一颗在类、方法、属性(数据域)前使用,表示一个类及他的成员的可见性。如果没有可见性修饰符,那么则默认类、方法、属性是可以被同一个包中的任何一个类访问的。

this引用

关键字this是指向调用对象本身的引用名,可以用this关键字引用对象的实例成员。他也可以在构造方法内部用于调用同一个类的其他构造方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值