Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何从ArrayList中选择特定对象_Java_Arraylist - Fatal编程技术网

Java 如何从ArrayList中选择特定对象

Java 如何从ArrayList中选择特定对象,java,arraylist,Java,Arraylist,我们正在制作一个简单的rpg游戏。现在我们有一个叫做战场的职业,玩家可以在这里与怪物战斗。当我们开始战斗时,我们使用一个随机发生器来挑选一个随机的怪物。在terminal/main方法中,我们有像“攻击”和“奔跑”这样的命令,它们要么对随机怪物造成伤害,要么让玩家离开/退出游戏。现在,我们正在尝试添加一个名为“攻击恐怖”的命令,它将让玩家与伤害最大的最硬的怪物战斗(在我们的主菜单中有三个可供选择)。我们需要一种方法,根据伤害从ArrayList怪物中选择一个特定的对象。有人知道我们怎么做吗 这是

我们正在制作一个简单的rpg游戏。现在我们有一个叫做战场的职业,玩家可以在这里与怪物战斗。当我们开始战斗时,我们使用一个随机发生器来挑选一个随机的怪物。在terminal/main方法中,我们有像“攻击”和“奔跑”这样的命令,它们要么对随机怪物造成伤害,要么让玩家离开/退出游戏。现在,我们正在尝试添加一个名为“攻击恐怖”的命令,它将让玩家与伤害最大的最硬的怪物战斗(在我们的主菜单中有三个可供选择)。我们需要一种方法,根据伤害从ArrayList怪物中选择一个特定的对象。有人知道我们怎么做吗

这是我们在战场类中开始游戏的代码:

 public void startBattle() {
    printWelcomeMessage();
    boolean finished = false;


    this.currentMonster = getRandomMonster();


    if(this.currentMonster == null) {
        return;
    }

    System.out.println("A random monster is chosen for you. Prepare to meet the mighty " + this.currentMonster.getName());
    System.out.println("\n-------- Player Stats ---------");
    System.out.println(this.player);
    while(!finished && monsters.size() > 0) {
        ArrayList<String> commands = reader.getInput();

        if(isValidCommand(commands)) {

            if(commands.contains("quit") && !this.currentMonster.isDead()){
                System.out.println("You can't quit the game in the middle of a fight!");
            }else if(commands.contains("quit") && this.currentMonster.isDead()) {
                finished = true;
                System.out.println();
                printFinalStats();
                System.out.println();
                System.out.println("You have left the arena, and the game has ended.");
                System.out.println();
            }


            if(commands.contains("run")) {
                finished = true;
                System.out.println("You are a coward and you lose 50 gold pieces...\n");
                this.player.changeGold(-50);
                printFinalStats();
                System.out.println("\nThanks for playing...");

            }else if(commands.contains("drink") && !this.currentMonster.isDead()){
                Potion potion = (Potion) player.findItem(commands.get(1));
                player.drinkPotion(potion);

            }else if(commands.contains("equip") && !this.currentMonster.isDead()){
            Weapons weapon = (Weapons) player.findItem(commands.get(1));
            player.useWeapon(weapon);
            } else if(commands.contains("attack") && !this.currentMonster.isDead()) {

                if(this.player.attack(this.currentMonster)) {
                        playerWon();
                    if(this.monsters.size() > 0) {
                        System.out.println("\nThere are " + this.monsters.size() + " more monsters to beat\nType \"attack\" if you want to attack another monster, or \"quit\" if you want to end the game.");                 
                    } else {
                        System.out.println("\n\n#### Congratulations ####\nYou have beaten every single monster in the game. You are a true champion!");
                        printFinalStats();
                        finished = true;
                    }

                } else if(this.currentMonster.attack(this.player)) {
                    printLosingMessage();
                    finished = true;
                }

            } else if(commands.contains("attack") && this.currentMonster.isDead() && this.monsters.size() > 0) {
                this.currentMonster = getRandomMonster();
                printContinueMessage(this.player, this.currentMonster);
                this.player.changeHealth(50);
            }

        } else {
            System.out.println("Please write a valid command. Valid commands are:");
            printCommands();
        }
    }
}
public void startBattle(){
printWelcomeMessage();
布尔完成=假;
this.currentMonster=getRandomMonster();
如果(this.currentMonster==null){
返回;
}
System.out.println(“为您选择了一个随机怪物。准备迎接强大的”+this.currentMonster.getName());
System.out.println(“\n-------玩家统计-----------”);
System.out.println(this.player);
而(!finished&&monsters.size()>0){
ArrayList commands=reader.getInput();
if(isValidCommand(命令)){
if(commands.contains(“quit”)&&!this.currentMonster.isDead()){
系统。out。打印(“你不能在战斗中退出游戏!”);
}else if(commands.contains(“quit”)&&this.currentMonster.isDead()){
完成=正确;
System.out.println();
printFinalStats();
System.out.println();
System.out.println(“您已经离开竞技场,游戏已经结束。”);
System.out.println();
}
if(commands.contains(“run”)){
完成=正确;
System.out.println(“你是个胆小鬼,丢了50块金币…\n”);
这个.player.changeGold(-50);
printFinalStats();
System.out.println(“\n播放等级…”);
}else if(commands.contains(“drink”)&&!this.currentMonster.isDead()){
药剂药剂=(药剂)玩家.findItem(commands.get(1));
玩家。饮用药水(药剂);
}else if(commands.contains(“装备”)&&!this.currentMonster.isDead()){
武器武器=(武器)玩家.findItem(命令.get(1));
玩家。使用武器(武器);
}else if(commands.contains(“攻击”)&&!this.currentMonster.isDead()){
如果(这个.玩家.攻击(这个.怪物)){
playerWon();
如果(this.monsters.size()>0){
System.out.println(“\n这里有“+这个.monsters.size()+”更多要打败的怪物\n如果你想攻击另一个怪物,请键入“攻击”;如果你想结束游戏,请键入“退出”);
}否则{
System.out.println(“\n\n#######################你在游戏中击败了每一个怪物。你是真正的冠军!”;
printFinalStats();
完成=正确;
}
}否则如果(此.currentMonster.attack(此.player)){
printLosingMessage();
完成=正确;
}
}else if(commands.contains(“攻击”)&&this.currentMonster.isDead()&&this.monsters.size()>0){
this.currentMonster=getRandomMonster();
printContinueMessage(this.player,this.currentMonster);
此.player.changeHealth(50);
}
}否则{
System.out.println(“请编写有效命令。有效命令为:”);
打印命令();
}
}
}
这是主类中怪物的阵列列表:

 Monster beelzebub = new Monster("Beelzebub", 60);
    Monster witch = new Monster("Witch", 40);
    Monster ogre = new Monster("Ogre", 80);

 ArrayList<Monster> monsters = new ArrayList<>();

    monsters.add(beelzebub);
    monsters.add(witch);
    monsters.add(ogre);

  Battleground battleground = new Battleground(monsters, player, reader);
    battleground.startBattle();
Monster beelzebub=新怪物(“beelzebub”,60);
怪物女巫=新怪物(“女巫”,40岁);
怪物食人魔=新怪物(“食人魔”,80);
ArrayList怪物=新的ArrayList();
怪物。添加(魔王);
怪物。添加(女巫);
怪物。添加(食人魔);
战场战场=新战场(怪物、玩家、读者);
战场;

我们感谢任何帮助

用SortedSet或PriorityQueue替换ArrayList。为Monster类实现一个比较器。然后选择怪物集合的第一个元素。

将ArrayList替换为SortedSet或PriorityQueue。为Monster类实现一个比较器。然后选择怪物集合的第一个元素。

我看不到你的怪物类,但我假设构造器的第二个变量是“伤害等级”?如果不是,理想情况下这应该是属于每个怪物的东西,所以你应该把它放在某个地方

所以你有一个阵阵怪物,它已经拥有了所有具有不同伤害等级的怪物。有很多方法可以做到这一点,但一个简单的方法(假设你只有3个怪物)就是迭代你的怪物,跟踪伤害最高的怪物,然后返回该怪物

例如:

Monster findHardestMonster(ArrayList<Monster> monsters)
{
   //Set to the first monster in the list ASSUMING you have
   //at least one monster
   Monster highestDamageMonster = monsters.get(0);

   //Go through every monster in your array
   for (Monster monster : monsters)
   {
       //record the highest so far
       if(monster.getDamage() > highestDamageMonster.getDamage())
           highestDamageMonster = monster;
        }
    }

    //return it
    return highestDamageMonster;
}
怪物findHardestMonster(阵列列表怪物)
{
//设置为列表中的第一个怪物,假设您有
//至少有一个怪物
Monster HighestDamageOnster=怪物。获取(0);
//穿过你阵阵中的每一个怪物
用于(怪物:怪物)
{
//创历史最高纪录
if(monster.getDamage()>highestdamagementster.getDamage())
最高伤害者=怪物;
}
}
//还它
返回最高的damagementster;
}
如果你计划频繁地移除怪物(比如,当他们被击败时),那么正如另一张海报所建议的那样,使用优先级队列或某种类型的队列可能是值得的
for(int i=0;i<monsters.size()-1;i++){
        Monster m=monsters.get(i);
        Monster m2=monsters.get(i+1); 
        if(m.getDamage()<m2.getDamage()){
            Monster rightMonster=m2;
        }else{
            Monster rightMonster=m;
        }
    }
Comparator<Monster> orderByDamage = 
               (m1, m2) -> m1.getDamage() < m2.getDamage() ? -1
                           : m1.getDamage() == m2.getDamage() ? 0 : 1;
Optional<Monster> scariest = monsters.stream().max(orderByDamage);
scariest.ifPresent(monster -> /* do something to the monster */);
Optional<Monster> leastScary = monsters.stream().min(orderByDamage);