java - 卡在获取数组的总计数和某些元素的计数上

标签 java arrays

我正在尝试在 LineUp 类中创建两种方法,一种称为totalMembers,它将返回成员总数,另一种称为totalKinds,执行相同的操作,但返回不同类型行为的数量。

这是 Act 类的代码,它在其中创建了一个用于管理音乐节(某种程度)的程序

public class Act {
    private int num_members;
    private String name;
    private String kind;
    private String stage;


    public Act(int num_members, String name, String kind, String stage) {
        this.num_members = num_members;
        this.name = name;
        this.kind = kind;
        this.stage = stage;
    }

    public Act(int num_members, String name, String kind) {
        this.num_members = num_members;
        this.name = name;
        this.kind = kind;
        stage = null;
    }

    public int getNum_members() {
        return num_members;
    }

    public void setNum_members(int num_members) {
        this.num_members = num_members;
    }

    public String getName() {
        return name;
    }

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

    public String getKind() {
        return kind;
    }

    public void setKind(String kind) {
        this.kind = kind;
    }

    public String getStage() {
        return stage;
    }

    public void setStage(String stage) {
        this.stage = stage;
    }

    public String toString() {
        return "(" + num_members + ", " + name + ", " + kind + ", " + stage + ")";
    }
}

类 LineUp 代表这些行为,这里是迄今为止的代码。我正在考虑使用 for 循环来获取每个行为的成员数量,但是由于它不是二维数组,因此很难做到。对于获得不同类型的行为我不知道。如果有人能让我朝着正确的方向前进,那就太好了。

import java.util.Arrays;

public class LineUp {
    private Act[] acts;
    private int number;
    private int memberSum;

    public LineUp() {
        acts = new Act[30];
        number = 0; 
        memberSum = 0;
    }

    public int numberOfActs() {
        return number;
    }

    public int totalMembers() {
        for(int i=0; i < acts.length; i++) {

        }
        return memberSum;
    }

    public int totalKinds() {

    }

    public void addAct(Act a) {
        if(number == 30)
            System.out.println("The festival is full!");
        else {
            acts[number] = a;
            number++;
        }
    }

    public String toString() {
        return acts + "";
    }

    public void Print() {
        System.out.println(Arrays.toString(acts));
    }
}

最佳答案

要正确建模行为,您必须使用 actors 。不,只是开玩笑,对此感到抱歉。

评估 act[] 的内容有很多不同的可能性。一个野蛮的、古老的版本会像这样

    public int totalKinds() {
        List<String> unique = new ArrayList<>();
        for (int i = 0; i < acts.length; i++) {
            if (!unique.contains(acts[i]))
                unique.add(acts[i].getKind());   
        }
        return unique.size();
    }

例如您可以使用增强的 for 循环并利用集合具有唯一元素的事实:

   public int totalKinds() {
        Set<String> unique = new HashSet<>();
        for (Act a: acts) {
            unique.add(a.getKind());
        }
        return unique.size();
    }

当然,最灵活、最方便的方法是使用 Java 8 中引入的流 api。它确实带来了 get acquainted 的返回。用它。请注意,count() 返回一个 Long,而您需要 int,因此需要进行转换。

    public int totalKinds() {
        long count = Arrays.asList(acts).stream()
                .map(act -> act.getKind())
                .distinct()
                .count();
        return Math.toIntExact(count);
    }

关于java - 卡在获取数组的总计数和某些元素的计数上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59121609/

相关文章:

java - java中如何让按钮点击时不可见?

java - 给定一个 org.w3c.dom.Element,如何在给定的 xpath 字符串中找到一个元素?

java - Autowiring 接口(interface)无需注释即可工作

java - 在运行时重新初始化 spring 中的 bean

Python-numpy : 'dimension dependent indexing'

php - Mysql Left Join 按月份为空月份的销售额表

java - Java中基于位板的数组生成问题

Javascript 将对象数组转换为树

java - 我如何在 Kotlin 中编写 Java 括号 "[ ]"?

java - 在 wicket 中,如何从面板内的 ajax 组件的 onSubmit 刷新反馈面板?