You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java中实现包含多类型属性的对象数组的方法咨询

嘿,我完全理解你现在的困惑——面向对象编程(OOP)刚开始确实容易让人摸不着头脑,但你遇到的问题正好是OOP最擅长解决的场景!咱们不用急,一步一步来把混乱的数组改成清晰的对象结构。

核心思路:用类封装项目的所有属性

你现在的问题是,单一的int[]只能存时长,但每个项目其实是一组关联的数据(名称、经理、时长)。OOP的核心就是把这些关联数据封装成一个类,让每个项目都变成这个类的对象,然后用「对象数组」来存储所有项目。

第一步:创建Project类,封装项目的三个属性

首先,新建一个Project.java文件,把每个项目的三个属性都放进去,再加上构造方法、getter/setter(方便访问和修改属性),以及toString方法(方便打印查看项目信息):

public class Project {
    // 私有字段,封装项目的三个属性
    private String projectName;
    private String projectManager;
    private int myMonths;

    // 全参构造方法:创建项目对象时直接传入所有属性
    public Project(String projectName, String projectManager, int myMonths) {
        this.projectName = projectName;
        this.projectManager = projectManager;
        this.myMonths = myMonths;
    }

    // getter和setter方法:用于访问和修改私有属性
    public String getProjectName() {
        return projectName;
    }

    public void setProjectName(String projectName) {
        this.projectName = projectName;
    }

    public String getProjectManager() {
        return projectManager;
    }

    public void setProjectManager(String projectManager) {
        this.projectManager = projectManager;
    }

    public int getMyMonths() {
        return myMonths;
    }

    public void setMyMonths(int myMonths) {
        this.myMonths = myMonths;
    }

    // toString方法:打印对象时能看到清晰的项目信息
    @Override
    public String toString() {
        return "项目名称:" + projectName + ",项目经理:" + projectManager + ",时长:" + myMonths + "个月";
    }
}

第二步:修改MenuTestClass,用Project[]替代int[]

原来的MenuTestClass只存了时长数组,现在我们要改成存储项目对象数组,同时调整对应的构造方法和setter:

public class MenuTestClass {
    // 把int数组换成Project对象数组
    private Project[] projects;
    private double average;
    private boolean averageCanBeCalculated;
    private int max;

    // 无参构造:初始化最多存5个项目的数组
    public MenuTestClass() {
        projects = new Project[5];
    }

    // 带参构造:直接传入项目数组
    public MenuTestClass(Project[] projects) {
        this.projects = projects;
    }

    // 修改setter方法,接收Project数组
    public void setProjects(Project[] projects) {
        this.projects = projects;
    }

    // 后续你可以添加计算平均时长、找最大时长的方法,比如:
    public void calculateAverage() {
        if (projects == null) {
            averageCanBeCalculated = false;
            return;
        }
        int total = 0;
        int count = 0;
        for (Project project : projects) {
            if (project != null) { // 跳过空的位置
                total += project.getMyMonths();
                count++;
            }
        }
        if (count > 0) {
            average = (double) total / count;
            averageCanBeCalculated = true;
        } else {
            averageCanBeCalculated = false;
        }
    }
}

第三步:修改main方法,创建项目对象并加入数组

现在回到你的main方法,调整case 1的逻辑,让用户输入项目的三个信息,创建Project对象后存入数组:

case 1:
    int n = 1; // 这里可以改成让用户输入项目数量,比如int n = sc.nextInt();
    Scanner sc = new Scanner(System.in);
    // 初始化Project数组,长度为n
    Project[] projects = new Project[n];
    int index = 0;

    System.out.println("** 仅可添加时长在2到12个月之间的项目 **");
    for(int i=0; i<n; i++){
        System.out.println("请输入第" + (i+1) + "个项目的名称:");
        String name = sc.next();
        System.out.println("请输入该项目的项目经理:");
        String manager = sc.next();
        System.out.println("请输入该项目的时长(单位:月):");
        int months = sc.nextInt();

        // 验证时长范围
        if(months < 2 || months > 12){
            System.out.println(" 请输入2到12个月之间的数值,该项目未添加。 ");
            continue; // 跳过当前循环,不添加这个项目
        }

        // 创建Project对象,存入数组
        projects[index++] = new Project(name, manager, months);
        System.out.println("项目添加成功!");
    }

    // 创建MenuTestClass对象,传入项目数组
    MenuTestClass calc = new MenuTestClass();
    calc.setProjects(projects);
    break;

为什么这样做?

这样修改后,数组的每个索引对应的都是一个完整的Project对象——比如projects[0]就包含了第一个项目的名称、经理、时长,再也不会出现数据分散、混乱的问题。而且以后如果要给项目加新属性(比如项目状态、预算),只需要在Project类里加字段和对应的getter/setter就行,非常容易扩展。

内容的提问来源于stack exchange,提问作者Aleo111

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.28 17:37:44