Java -obejct случайного выбора

#java #class #object

#java #класс #объект

Вопрос:

у меня есть эти два кода:

game.java

 package game;

import java.util.*;

public class games {
    public static Random rd = new Random();
    

    public static void main(String[] args){
        
    //enemies
    enemy skeleton = new enemy(1, "jarda" , 2 , 3);
    enemy kostlivec = new enemy(2, "pepa" , 2 , 3);
     
    }
}
  

и enemy.java

 package game;

import java.util.jar.Attributes.Name;

public class enemy {
    public static int number;
    public static String název;
    public static int damage;
    public static int health;

    public enemy(int number, String název, int damage, int health){
        this.number = number;
        this.název = název;
        this.damage = damage;
        this.health = health;
    }


    
}
  

Как я могу случайным образом выбрать один из этих объектов и распечатать его пользователю?
Я пробую arraylist, массивы и многие другие.

Комментарии:

1. Поместите объекты в коллекцию, например List , или Array . Затем используйте java.util.Random#nextInt(int upperBound) , в то время как верхняя граница будет размером / длиной вашей коллекции. Затем используйте результат для извлечения и печати нужного объекта через индекс вашей коллекции (например, через yourList.get(randResult) ).

2. Пожалуйста, используйте заглавные буквы в именах ваших классов на Java

3. пожалуйста, используйте factory для создания user

Ответ №1:

Как указано в комментариях, вы должны использовать random.nextInt() с верхней границей. Вы можете создать List<Enemy> и передать его size() как верхний. Вот простая реализация:

 private static Enemy getRandomEnemy(final List<Enemy> enemies) {
    int randomEnemyIndex = rd.nextInt(enemies.size());
    return  enemies.get(randomEnemyIndex);
}
  

Вы бы вызвали его из main() метода, подобного этому:

 ArrayList<Enemy> enemies = new ArrayList<>();
// enemies
enemies.add(new Enemy(1, "jarda" , 2 , 3));
enemies.add(new Enemy(2, "pepa" , 2 , 3));
enemies.add(new Enemy(3, "Palpatine" , 10 , 3));
enemies.add(new Enemy(4, "Darth Vader" , 9 , 10));

System.out.println("Current Enemy: "   getRandomEnemy(enemies).název);
System.out.println("Current Enemy: "   getRandomEnemy(enemies).název);
System.out.println("Current Enemy: "   getRandomEnemy(enemies).název);
System.out.println("Current Enemy: "   getRandomEnemy(enemies).název);
  

Bdw, некоторые придирки к Enemy классу; По соглашению имена классов Java должны начинаться с символа верхнего регистра. Я думаю, что он должен иметь нестатические элементы поля. В противном случае я не вижу смысла хранить разных врагов:

 public class Enemy {
    public int number;
    public String název;
    public int damage;
    public int health;

    public Enemy(int number, String název, int damage, int health){
        this.number = number;
        this.název = název;
        this.damage = damage;
        this.health = health;
    }
}
  

Ответ №2:

Добавьте объект в список и получите случайный индекс с помощью кода Random.nextInt(list.size())

 package com.game.main;

import java.util.ArrayList;
import java.util.List;
import java.util.Random;

import com.game.model.Enemy;

public class Games {

    public static void main(String[] args) {
        Enemy skeleton = new Enemy(1, "jarda", 2, 3);
        Enemy kostlivec = new Enemy(2, "pepa", 2, 3);

        List<Enemy> list = new ArrayList<>();
        list.add(skeleton);
        list.add(kostlivec);

        Random random = new Random();
        int indexRandom = random.nextInt(list.size());
        System.out.println(list.get(indexRandom));
    }
}
  

Ответ №3:

Как описано в комментарии:

 public class Testing {

    public static void main(String[] args) {

        MyObject obj1 = new MyObject(1, 2);
        MyObject obj2 = new MyObject(3, 4);
        ArrayList<MyObject> myList = new ArrayList<>();
        myList.add(obj1);
        myList.add(obj2);
        
        Random rand = new Random();
        int randResult = rand.nextInt(myList.size());
        System.out.println(myList.get(randResult));
    }
}

class MyObject {
    private int value;
    private int anotherValue;
    
    MyObject(int v1, int v2) {
        value = v1;
        anotherValue = v2;
    }
    
    @Override
    public String toString() {
        return "MyObject with values: "   value   ", "   anotherValue;
    }
}
  

Вывод:

 MyObject with values: 1, 2