基于Java语言的面对对象进阶算法练习

主要是对面向对象基础的进一步拓展,对private,static,this等关键字的熟练掌握。


一,编写一个类Task,代表GTA5的主线任务。

1.问题
  • 要求:具有属性: 名称(title)、任务序号(num),其中主线任务不能多于69个或者少于0个,否则输出错误信息,并赋予默认值 1。

  • 具有方法: 为各属性设置赋值和取值方法。 say,用来在控制台输出每个主线任务的名称及目前的任务序号

  • 编写测试类 TaskTest 进行测试:为 Task对象的属性赋予初始值,并调 用 Task 对象的 say方法,看看输出是否正确

2.代码

代码如下:

public class TaskTest {
    public static void main(String[] args) {
        Task t1 = new Task();
        t1.setTitle("依计行事");
        t1.setNum(100); //错误测试
        t1.say();

        Task t2 = new Task("谍影重重", 44);
        t2.say();
    }
}

class Task {
    private String title;        // 名称
    private int num;            // 序号

    Task() {                        // 构造方法——无参
        title = "空";
        num = 1;
    }

    Task(String title, int num) {  //有参
        this.setTitle(title);
        this.setNum(num);
    }
    
    public String getTitle() {    // getter与setter方法
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public int getNum() {
        return num;
    }

    public void setNum(int num) {
        if (num > 69 || num < 0) {
            System.out.println("任务序号不能多于69或少于0,已自动设置为默认值1");
            this.num = 1;
        } else this.num = num;
    }

    public void say() {        // 输出任务详情
        System.out.println("任务名:" + this.title);
        System.out.println("任务序号:" + this.num);
        System.out.println();
    }
}

private意译为“私有的”,被private修饰的成员只能在本类中访问。
public意译为“公开的”,其修饰的成员数据或方法对外部可见。

3.效果截图

在这里插入图片描述


二,通过类描述R星公司的GTA6开发员

1.问题
  • 具有属性: 姓名,年龄,性别,爱好,公司(都是:R星),小组(都是:GTA6制作组)。
2.代码

代码如下:

package StudentDemo;

public class StudentDemo {
    public static void main(String[] args) {
        Student.company = "R星";
        Student.subject = "GTA6小组";
        Student S1 = new Student("张三", 21, "男", "打篮球");
        Student S2 = new Student("李四", -15, "人妖", "踢足球");  //错误测试
        Student S3 = new Student("王五", 160, "女", "打排球");    //错误测试

        S1.say();
        S2.say();
        S3.say();

        System.out.println("-----------修改后----------");
        S2.setAge(20);
        S2.setSex("男");
        S3.setAge(22);

        S1.say();
        S2.say();
        S3.say();
    }
}

class Student {
    private String name;
    private int age;
    private String sex;
    private String hobby;
    static String company; //静态成员变量,表示类共有
    static String subject; //静态成员变量

    Student() {
        this.name = "空";
        this.age = 0;
        this.sex = "空";
        this.hobby = "空";
    }

    Student(String name, int age, String sex, String hobby) {
        this.setName(name);
        this.setAge(age);
        this.setSex(sex);
        this.setHobby(hobby);
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        if (age < 0 || age > 150) {
            System.out.println("同学[" + this.name + "]的年龄为[" + age + "],请输入1~150");
        } else this.age = age;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        if (sex != "男" && sex != "女") {
            System.out.println("同学[" + this.name + "]的性别为[" + sex + "],请输入男/女");
        } else this.sex = sex;
    }

    public String getHobby() {
        return hobby;
    }

    public void setHobby(String hobby) {
        this.hobby = hobby;
    }

    public void say() {
        System.out.println("姓名:" + name);
        System.out.println("年龄:" + age);
        System.out.println("性别:" + sex);
        System.out.println("爱好:" + hobby);
        System.out.println("公司:" + company);
        System.out.println("小组:" + subject);
        System.out.println();
    }
}

static为静态成员变量,可以直接使用“类名.静态方法名()”调用。表示整个类所共有的。

3.效果图

在这里插入图片描述
在这里插入图片描述

三,通过类描述GTA5三主角, 每个主角对象创建时需要自动生成一个序号值

1.问题
  • 要求:每个主角的序号是不同的, 且是依次递增 1 的
2.代码

代码如下:

package LeadDemo;

public class LeadDemo {
    public static void main(String[] args) {
        Lead l1 = new Lead("富兰克林", 28);
        Lead l2 = new Lead("麦可", 48);
        Lead l3 = new Lead("崔佛", 48);

        l1.say();
        l2.say();
        l3.say();
    }
}

class Lead {
    private static int count = 0; 
    private String name;
    private int age;
    private int ID;    //序号

    {
        this.ID = ++count;
    }

    Lead() {
    }

    Lead(String name, int age) {
        this.setName(name);
        this.setAge(age);
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public void say() {
        System.out.println("姓名:" + name);
        System.out.println("序号:" + ID);
        System.out.println("年龄:" + age);
        System.out.println();
    }
}

注意:

  1. 构造代码块 每次创建新的对象时均会调用
  2. 执行顺序:静态代码块>构造代码块>构造方法
3.效果图

在这里插入图片描述


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值