#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