gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 19:46:21 24 4
gpt4 key购买 nike

我正在尝试在 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com