英文:
Is there a way to add integers from an arraylist together?
问题
我正在尝试将ArrayList中的整数相加,以便让人们看到有多少人排队进行1v1对战。这是我的代码:
package me.sub.cPractice.Queue;
Main plugin;
public JoinQueue(Main plugin) {
this.plugin = plugin;
}
@Override
public boolean onCommand(CommandSender sender, Command cmd, String s, String[] args) {
if (cmd.getName().equalsIgnoreCase("queuetest")) {
Player p = (Player) sender;
new BukkitRunnable() {
@Override
public void run() {
if (plugin.inqueue.contains(p)) {
String replaced = PlaceholderAPI.setPlaceholders(p, "%server_online%");
ScoreHelper helper = ScoreHelper.createScore(p);
helper.setTitle("§6§lGoldHQ §r§7┃ §rPractice");
helper.setSlot(8, "§7§m---------------------");
helper.setSlot(7, "§eOnline: §f" + replaced);
helper.setSlot(6, "§eIn Fights: §f" + plugin.infightnumber.toString().replace("[", "").replace("]", ""));
helper.setSlot(5, "§7§m---------------------");
helper.setSlot(4, "§eQueued For: §fNoDebuff");
helper.setSlot(3, "" + plugin.inqueuenumber.toString().replace("[", "").replace("]", ""));
helper.setSlot(2, "§7§ogoldhq.net");
helper.setSlot(1, "§7§m---------------------");
}
}
}.runTaskTimer(plugin, 20L, 20L);
}
return false;
}
我已经卡在这个问题上几个小时了,但没有找到有效的解决方法。它显示为1,1,但我希望它显示为2。有什么帮助吗?
英文:
I'm trying to add integers from an arraylist together to allow the person to see how many people are queued for a 1v1. This is my code: `
package me.sub.cPractice.Queue;
Main plugin;
public JoinQueue(Main plugin) {
this.plugin = plugin;
}
@Override
public boolean onCommand(CommandSender sender, Command cmd, String s, String[] args) {
if (cmd.getName().equalsIgnoreCase("queuetest")) {
Player p = (Player) sender;
new BukkitRunnable() {
@Override
public void run() {
if (plugin.inqueue.contains(p)) {
String replaced = PlaceholderAPI.setPlaceholders(p, "%server_online%");
ScoreHelper helper = ScoreHelper.createScore(p);
helper.setTitle("&6&lGoldHQ &r&7┃ &rPractice");
helper.setSlot(8, "&7&m---------------------");
helper.setSlot(7, "&eOnline: &f" + replaced);
helper.setSlot(6, "&eIn Fights: &f" + plugin.infightnumber.toString().replace("[", "").replace("]", ""));
helper.setSlot(5, "&7&m---------------------");
helper.setSlot(4, "&eQueued For: &fNoDebuff");
helper.setSlot(3, "" + plugin.inqueuenumber.toString().replace("[", "").replace("]", ""));
helper.setSlot(2, "&7&ogoldhq.net");
helper.setSlot(1, "&7&m---------------------");
}
}
}.runTaskTimer(plugin, 20L, 20L);
}
return false;
}
`
I've been stuck on this for a couple hours now, and I haven't been able to find anything that works. It displays it as 1, 1 when I want it to be displayed as 2. Any help?
答案1
得分: 2
首先,您的问题中根本没有包含ArrayList
。我猜想您的问题出在以下代码行:
helper.setSlot(3, """ + plugin.inqueuenumber.toString().replace(""["", """).replace(""]"", """));
您可以使用以下代码将那些数字合并在一起:
helper.setSlot(3, """ + Arrays.stream(plugin.inqueuenumber.toString()
.replace(""["", """")
.replace(""]"", """")
.split("","")
).map(Integer::parseInt)
.reduce(0, (subtotal, current) -> subtotal + current)
)
编辑:我注意到plugin.inqueuenumber
就是您一直在谈论的ArrayList
,因此以下代码也应该起作用,前面的解决方案是多余的:
helper.setSlot(3, """ + plugin.inqueuenumber.stream().reduce(0, (l, r) -> l + r))
英文:
First of all your question doesn't contain ArrayList
at all. I guess your problem is at line:
helper.setSlot(3, "" + plugin.inqueuenumber.toString().replace("[", "").replace("]", ""));
You can use following code to merge that number's together:
helper.setSlot(3, "" + Arrays.stream(plugin.inqueuenumber.toString()
.replace("[", "")
.replace("]", "")
.split(",")
).map(Integer::parseInt)
.reduce(0, (subtotal, current) -> subtotal + current)
)
Edit: i noticed that plugin.inqueuenumber
is that ArrayList
you have been talking about so also following should work and previous solution is redundant:
helper.setSlot(3, "" + plugin.inqueuenumber.stream().reduce(0, (l, r) -> l + r))
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论