以下程序要求提供玩家数量及其名称。我想把这些名字放在一个arraylist中并按照他们的身份归还。
private static ArrayList<Player>Playerlist=new ArrayList<Player>();
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String s;
{
System.out.printf("number of players(2 -4)? ");
int p = scanner.nextInt();
scanner.nextLine();
for(int i=0;p>4 || p<2;i++)
{
System.out.printf("only 2-4 players.\n");
System.out.printf("number of players(2 -4)?");
p = scanner.nextInt();
scanner.nextLine();
}
Player pl=new Player();
int m=1;
for(int k=1;k<=p;k++)
{
System.out.printf("give the name of the player %d: ",k);
s= scanner.nextLine();
pl.setName(s,m);
System.out.printf(pl.getName());
Playerlist.add(pl);
m++;
}
public class Player {
private String name;
private int id;
public Player () {
}
Player(String val,int k) {
this.name = val;
this.id=k;}
/**
* getName
*
*/
public String getName () {
return name;
}
/**
* setName
*/
public void setName (String val,int k) {
this.name = val;
this.id=k;
}
public void displayStudentDetails(){
System.out.println("ID is "+id);
System.out.println("Name is "+name)};
我不知道如何通过id进行搜索...我尝试过很多东西,但是他们没有工作......
答案 0 :(得分:2)
更好的解决方案是使用HashMap<Integer, String>
,其中id为键,名称为值。然后你可以轻松搜索:
HashMap<Integer, String> map = new HashMap<Integer, String>();
map.put(1, "Robert");
map.put(2, "Jeff");
然后搜索:
String name = map.get(1); // will return "Robert"
编辑:好的,如果您需要的数据不仅仅是名称,比如分数,则需要创建数据类型。像:
public class Player {
private String name;
private int score;
// etc.
public Player(String name, int score) {
this.name = name;
this.score = score;
}
}
然后你可以将这种类型的对象添加到地图中,如:
map.put(1, new Player("Robert", 10));
答案 1 :(得分:0)
忽略这样一个事实:你现在应该在没有全局变量的不同文件中有类...
/**
* Searches the PlayerList Arraylist for a Player having the ID of the parameter passed
*/
public Player searchByID(int id) {
//Do some sort of check on id to ensure its valid?
for (int i = 0; i < PlayerList.size(); i++) {
if (PlayerList.get(i).getID() == id) {
return PlayerList.get(i);
}
}
return null;
}
答案 2 :(得分:0)
ArrayList可能是错误的数据结构。如果你想以id的顺序检索元素,你需要一个HashMap,如果id都是常规的,你可以确定“id为1到10且没有未使用的id”。如果id集稀疏,你将需要使用TreeMap或TreeSet,具体取决于你的其他用例。
答案 3 :(得分:0)
如果您需要通过ID获取玩家的情况完全取决于您的代码添加玩家的方式,那么您可以这样做:
public Player getPlayerById(int id)
{
return PlayerList.get(id - 1);
}
因为您为第一个玩家从1开始线性分配玩家ID。如果您正在修改或以其他方式更改玩家和ID的顺序,那么您将需要使用其他建议之一(但如果您不这样做,那么这是最优化的解决方案)。
注意:如果播放器列表中不存在id,上面的代码将抛出一个ArrayIndexOutOfBoundsException,您是否想根据想要处理的方式修改代码。