java - 如何在 main 中的所有声明对象中仅选择该数组中的随机元素一次?

标签 java arrays string assert

我希望这些对象在 main.c 中声明的所有对象中仅打印一次数组中的随机名称。我的问题是它会显示名称两次或更多次。

public class Fighters {

    private static String[] names = { "Terminator", "Slicer","Ninja", "cow", "Robot", "littlegirl" };
    private static int id = 0;

    public Fighters(){
        id++;
        name = names[(int) (Math.random() * names.length)];
    }

    public String toString(){
        return String.format(id+" Name:%-5s, name);
    }
}

main() 中我有这些对象

Fighters a1 = new Fighters();
System.out.println(a1.toString());

Fighters a2 = new Fighters();
System.out.println(a2.toString());

Fighters a3 = new Fighters();
System.out.println(a3.toString());

最佳答案

如果您想将名称分配保留在 Fighter 类中,请使用静态变量来保存已使用名称的列表。您需要确保您创建的战斗机数量没有超过名称数组。否则这将无限循环。我将把这部分留给你来解决。这至少应该让您走上正确的道路。

import java.util.ArrayList;

public class Fighter {

    private String name;

    private static String[] names = { "Terminator", "Slicer","Ninja", 
             "cow", "Robot", "littlegirl" };
    private static int id = 0;
    private static ArrayList<String> usedNames = new ArrayList<String>();


    public void Fighters(){
        id++;
        String checkedName = "";
        do{
            checkedName = names[(int) (Math.random() * names.length)];
            if(!usedNames.contains(checkedName)) break;
        }
        while(true);
        name = checkedName;
        usedNames.add(name);
    }

    public String toString(){
        return String.format(id+" Name:%-5s, name");
    }

}

关于java - 如何在 main 中的所有声明对象中仅选择该数组中的随机元素一次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19125530/

相关文章:

java - 在 documentSnapShot 中获取值,但将其转换为对象时,对象返回 null,为什么?

java - Android sqlite 数据库 - 如何显示 ListView 在滚动末尾添加 “Load more items”

c - 为什么代码不是递归出来的?

php - 将 MySQL 行与 PHP 数组值进行比较

Java正则表达式用于删除除模式之外的所有字符

JavaScript 使用正则表达式和偏移量开始

C: 删除非字母字符的程序

java - 无法从 Java 下载 Azure blob

java - 此代码抛出 NullPointerException 是标准行为吗?

javascript - 数组列表项搜索