Java面向对象编程基础练习题

编程前提:
(1)熟练掌握类、对象的概念以及对事物的抽象。
(2)熟练掌握成员、方法的概念以及构造方法的概念。
(3)熟练掌握封装性,多态性的概念
(4)理解面向对象的程序设计方法。

题目如下

(1)先创建一个Point类,然后定义Trianglele类。在Trianglele类中定义三个Point的实体来表示一个三角形的三个点,再定义一个方法setTri对这三个点进行初始化,然后定义两个方法求三角形的周长、面积。在main()中创建一个三角形对象,求给定三点的三角形的周长、面积。

对应代码

public class Point {
    private double x;
    private double y;
    public double getX() {
        return x;
    }
    public void setX(double x) {
        this.x = x;
    }
    public double getY() {
        return y;
    }
    public void setY(double y) {
        this.y = y;
    }
    public void setTri(double a, double b) {
        x=a;
        y=b;
    }
}
public class Trianglele {
    Point m1;
    Point m2;
    Point m3;
    public Point getM1() {
        return m1;
    }
    public void setM1(Point m1) {
        this.m1 = m1;
    }
    public Point getM2() {
        return m2;
    }
    public void setM2(Point m2) {
        this.m2 = m2;
    }
    public Point getM3() {
        return m3;
    }
    public void setM3(Point m3) {
        this.m3 = m3;
    }
    public static double GetL(Point m1,Point m2) {
        return Math.sqrt(Math.pow(m1.getX()-m2.getX(),2)+Math.pow(m1.getY()-m2.getY(),2));
    }
    public static double GetC(Point m1,Point m2,Point m3) {
        return GetL(m1,m2)+GetL(m2,m3)+GetL(m1,m3);
    }
    public static double GetS(Point m1,Point m2,Point m3) {
        double p=GetL(m1,m2)+GetL(m2,m3)+GetL(m1,m3);
        return Math.sqrt(p*(p-GetL(m1,m2)*(p-GetL(m1,m3)*(p-GetL(m2,m3)))));
    }
}
public class Test {
    public static void main(String[] args) {
        Trianglele tri=new Trianglele();
        Point m1=new Point();
        Point m2=new Point();
        Point m3=new Point();
        m1.setTri(0, 0);
        m2.setTri(4, 3);
        m3.setTri(3, 4);
        tri.setM1(m1);
        tri.setM2(m2);
        tri.setM3(m3);
        System.out.println("该三角形周长为"+Trianglele.GetC(m1, m2, m3));
        System.out.println("该三角形面积为"+Trianglele.GetS(m1,m2,m3));
    }
}

第一题知识点:创建一个对象,在类中使用Get和Set方法对属性值操作,以及方法的定义和调用

(2) 将(1)题的方法setTri改用构造方法实现初始化。

public class Point {
    private double x;
    private double y;
    public double getX() {
        return x;
    }
    public void setX(double x) {
        this.x = x;
    }
    public double getY() {
        return y;
    }
    public void setY(double y) {
        this.y = y;
    }
    public Point(double x, double y) {
        super();
        this.x = x;
        this.y = y;
    }
}
public class Trianglele {
    Point m1;
    Point m2;
    Point m3;
    public Point getM1() {
        return m1;
    }
    public void setM1(Point m1) {
        this.m1 = m1;
    }
    public Point getM2() {
        return m2;
    }
    public void setM2(Point m2) {
        this.m2 = m2;
    }
    public Point getM3() {
        return m3;
    }
    public void setM3(Point m3) {
        this.m3 = m3;
    }
    public double GetL(Point m1,Point m2) {
        return Math.sqrt(Math.pow(m1.getX()-m2.getX(),2)+Math.pow(m1.getY()-m2.getY(),2));
    }
    public double GetC(Point m1,Point m2,Point m3) {
        return GetL(m1,m2)+GetL(m2,m3)+GetL(m1,m3);
    }
    public double GetS(Point m1,Point m2,Point m3) {
        double p=GetL(m1,m2)+GetL(m2,m3)+GetL(m1,m3);
        return Math.sqrt(p*(p-GetL(m1,m2)*(p-GetL(m1,m3)*(p-GetL(m2,m3)))));
    }
}
public class Test {
    public static void main(String[] args) {
        Trianglele tri=new Trianglele();
        Point m1=new Point(0,0);
        Point m2=new Point(3,4);
        Point m3=new Point(4,3);
        tri.setM1(m1);
        tri.setM2(m2);
        tri.setM3(m3);
        System.out.println("该三角形周长为"+tri.GetC(m1, m2, m3));
        System.out.println("该三角形面积为"+tri.GetS(m1,m2,m3));
    }
}

第二题与第一题相差不多,与第一题不同的是使用构造方法对对象初始化

(3)编写JAVA程序创建圆柱体类,具有求表面积和体积的功能。已知给定一个圆柱体,底面圆心p为(0,0),半径r为10,圆柱体高5,求此圆柱体的表面积和体积。

public class Cylinder {
    static double PI=3.14;
    private double r;
    private double h;
    public Cylinder(double r,double h) {
        this.r=r;
        this.h=h;
    }
    public double GetSa() {
        return 2*PI*r*(h+r);
    }
    public double GetV() {
        return PI*r*r*h;
    }
}
public class Test {
    public static void main(String[] args) {
        Cylinder cy=new Cylinder(10,5);
        System.out.println("该圆柱体表面积为"+cy.GetSa());
        System.out.println("该圆柱体体积为"+cy.GetV());
    }
}

第三题与前两题知识点相同

(4)试声明一个类,类名为student,属性如下:
学号(no):1001
姓名(name):张小林
性别(sex):男
年龄(age):24
行为如下:
上课(HaveClass):返回值为true表示上课;返回值为false表示没上课。
睡觉(Sleep):返回值为true表示在睡觉,返回值为false表示没睡觉。
声明该类的对象(stu),并输出该对象的属性和行为的值。
运行结果为:
学号:1001
姓名:张小林
性别:男
年龄:24
sleep()=true
HaveClass()=false

public class Student {
    private int no = 1001;
    private String name = "张小林";
    private String sex = "男";
    private int age = 24;
    public boolean HaveClass() {
        return false;
    }
    public boolean Sleep() {
        return true;
    }
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Student Stu = new Student();
        System.out.println("学号:" + Stu.no);
        System.out.println("姓名:" + Stu.name);
        System.out.println("性别:" + Stu.sex);
        System.out.println("年龄:" + Stu.age);
        System.out.println("sleep()=" + Stu.Sleep());
        System.out.println("HaveClass=" + Stu.HaveClass());
    }
}

(5)定义一个表示学生信息的类Student,要求如下:
a.类Student的成员变量:
sNO 表示学号;sName表示姓名;sSex表示性别;sAge表示年龄;sJava:表示Java课程成绩。
b.类Student带参数的构造方法:
在构造方法中通过形参完成对成员变量的赋值操作。
c.类Student的方法成员:
getNo():获得学号;
getName():获得姓名;
getSex():获得性别;
getAge()获得年龄;
getJava():获得Java 课程成绩
根据类Student的定义,创建五个该类的对象,输出每个学生的信息,计算并输出这五个学生Java语言成绩的平均值,以及计算并输出他们Java语言成绩的最大值和最小值。

public class Student {
    private int sNO;
    private String sName;
    private String sSex;
    private int sAge;
    private double sJava;
    public Student(int sNO, String sName, String sSex, int sAge, double sJava) {
        super();
        this.sNO = sNO;
        this.sName = sName;
        this.sSex = sSex;
        this.sAge = sAge;
        this.sJava = sJava;
    }
    public int getNO() {
        return sNO;
    }
    public String getName() {
        return sName;
    }
    public String getSex() {
        return sSex;
    }
    public int getAge() {
        return sAge;
    }
    public double getJava() {
        return sJava;
    }
    public double GetAvg(Student [] students){
        double sum=0;
        for(int i=0;i<students.length;i++)
        {
            sum=sum+students[i].getJava();
        }
        return sum/students.length;
    }
    public double GetMax(Student [] students){
        double f=-1;
        for(int i=0;i< students.length;i++)
        {
            if(students[i].getJava()>f)
            {
                f=students[i].getJava();
            }
        }
        return f;
    }
    public double GetMin(Student [] students){
        double F=100;
        for(int i=0;i< students.length;i++)
        {
            if(students[i].getJava()<F)
            {
                F=students[i].getJava();
            }
        }
        return F;
    }
}
public class Test {
    public static void main(String[] args) {
        Student [] stu =new Student[5];
        Student stu1=new Student(01,"小明","男",18,89);
        Student stu2=new Student(02,"小虎","男",19,87);
        Student stu3=new Student(03,"小红","女",18,94);
        Student stu4=new Student(04,"李华","女",19,91);
        Student stu5=new Student(05,"小强","男",20,83);
        stu[0]=stu1;
        stu[1]=stu2;
        stu[2]=stu3;
        stu[3]=stu4;
        stu[4]=stu5;
        System.out.println("这五位学生Java语言成绩为:"+stu1.GetAvg(stu));
        System.out.println("这五位学生中Java语言成绩的最大值为:"+stu1.GetMax(stu));
        System.out.println("这五位学生中Java语言成绩的最小值为:"+stu1.GetMin(stu));
    }
}

(6)定义一个“圆”类Circle,该圆类的数据成员包括:圆心点位置及圆的半径;方法成员有:设置圆心位置和半径的方法,获取圆心位置和半径的方法及构造方法。要求构造方法可以接收圆心位置参数,而半径使用缺省值1。编写完整的程序并创建Circle类的对象,并且分别调用各种方法,对比这些方法的执行结果。

public class Circle {
    private double x;
    private double y;
    private double r = 1;
    public double getX() {
        return x;
    }
    public void setX(double x) {
        this.x = x;
    }
    public double getY() {
        return y;
    }
    public void setY(double y) {
        this.y = y;
    }
    public double getR() {
        return r;
    }
    public void setR(double r) {
        this.r = r;
    }
    public Circle(double x, double y) {
        super();
        this.x = x;
        this.y = y;
    }
}
public class Test {
    public static void main(String[] args) {
        Circle cir=new Circle(4,3);
        System.out.println("使用构造方法初始化该圆圆心坐标及半径");
        System.out.println("该圆的半径为:"+cir.getR());
        System.out.println("该圆的圆心坐标为:("+cir.getX()+","+cir.getY()+")");
        cir.setX(7);
        cir.setY(4);
        cir.setR(5);
        System.out.println("使用set方法给该圆圆心坐标及半径重新赋值");
        System.out.println("该圆的半径为:"+cir.getR());
        System.out.println("该圆的圆心坐标为:("+cir.getX()+","+cir.getY()+")");
    }
}

(7)创建一个类,类名为StaticMethodTest,包含一个静态方法和一个实例方法,在main方法中分别调用这个两个方法进行测试。

public class StaticMethodTest {
    static int a=100;
    static int b=13;
    public static int sta(){
        return a+b;
    }
    public int Fsta(){
        return a-b;
    }
    public static void main(String[] args) {
        System.out.println("静态方法输出:"+StaticMethodTest.sta());
        StaticMethodTest STA=new StaticMethodTest();
        System.out.println("实例方法输出:"+STA.Fsta());
    }
}

(8)创建一个Person类,在该类中用不同的访问修饰符设立不同的person属性,再创建一个PersonTest类,包括main方法,在此类中分别访问Person类中各个属性。

public class Person {
    public String Name="李华";
    protected String Sex="男";
    String Num="001";
    private int age=19;
    public int getAge() {
        return age;
    }
}
public class PersonTest {
    public static void main(String[] args) {
        Person person=new Person();
        System.out.println("该对象姓名:"+person.Name);
        System.out.println("性别:"+person.Sex);
        System.out.println("学号:"+person.Num);
        System.out.println("年龄:"+person.getAge());
    }
}

总的来说,这几道题目主要考察了面向对象的一些基础知识,方法的定义和调用,访问修饰符的使用,仅供初学还未入门者学习参考。

你可能感兴趣的:(java)