我希望这些对象在 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/