在一个游戏中,我需要对速度属性上的对象数组列表(Room.enemies)和具有速度属性的玩家对象进行两种排序,以便我可以知道需要按什么顺序运行攻击方法。
例如,在 room.enemies 数组中,我有一个妖精(速度 10)蜘蛛(速度 8)妖精(速度 10),而玩家的速度为 12 我想首先从玩家处执行攻击敌人,然后然后执行 AttackPlayer 方法 3 次(妖精,妖精,妖精)。
import java.util.Random;
public class Battle {
private boolean attackPlayer(Player player, Enemy enemy) {
int edamage = 0;
int eamplifier = enemy.getDamage() - player.getDefense();
Random dice = new Random();
for (int i=1; i < enemy.getAgility(); i++) {
edamage += dice.nextInt(10) + eamplifier;
}
if (edamage < 0) {
edamage = 0;
}
return player.takeDamage(edamage);
}
private boolean attackEnemy(Player player, Enemy enemy) {
int damage = 0;
int amplifier = player.getDamage() - enemy.getDefense();
Random dice = new Random();
for (int i=1; i < player.getAgility(); i++) {
damage += dice.nextInt(10) + amplifier;
}
if (damage < 0) {
damage = 0;
}
return enemy.takeDamage(damage);
}
private void gameturn(Player player, Room room) {
}
}
最佳答案
如果您使用的是 Java 8 或更高版本(我希望如此)。 您可以通过 Stream API 使用方便的比较器。
类似于以下内容:
ArrayList<String> list = new ArrayList(....);
list.sort(Comparator.comparing(Enemy::getSpeed)
.thenComparing(Enemy::someOtherProperty));
或者仅使用 Stream API:
List<String> sortedBySpeed = list.stream()
.sorted(Comparator.comparing(Enemy::getSpeed))
.collect(Collectors.toList());
你已经有了排序敌人的列表sortedBySpeed
。
关于java - 如何对两个对象数组列表进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54159759/