поиск по списку по id-java - PullRequest
       3

поиск по списку по id-java

2 голосов
/ 14 декабря 2011

Следующая программа просит указать количество игроков и их имена.Я хочу поместить имена в 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)};

Я не знаю, как выполнить поиск по идентификатору ... Я пробовал много вещей, но они не работали ....

Ответы [ 4 ]

2 голосов
/ 14 декабря 2011

Лучшим решением было бы использовать HashMap<Integer, String>, где идентификатор является ключом, а имя - значением. Тогда вы можете легко искать:

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));
0 голосов
/ 14 декабря 2011

Если ситуация, когда вам нужно получить игрока по идентификатору, основана именно на том, как ваш код добавляет игроков, то вы можете просто сделать:

public Player getPlayerById(int id)
{
  return PlayerList.get(id - 1);
}

Поскольку вы назначаете идентификаторы игроков линейно, начиная с 1, для первого игрока. Если вы изменяете или иным образом меняете порядок игроков и идентификаторов, вам нужно использовать одно из других предложений (но если вы этого не делаете, то это наиболее оптимизированное решение).

Примечание. Приведенный выше код вызовет исключение ArrayIndexOutOfBoundsException, если идентификатор не существует в списке проигрывателей. Возможно, вы захотите изменить код в зависимости от того, как вы хотите его обработать.

0 голосов
/ 14 декабря 2011

ArrayList, вероятно, неправильная структура данных.Если вы хотите получить элементы в порядке идентификаторов, вам нужен HashMap, если все идентификаторы являются регулярными в том смысле, что вы можете быть уверены в таких вещах, как «идентификаторы от 1 до 10 и нет неиспользуемых идентификаторов».Если набор идентификаторов невелик, вы захотите использовать TreeMap или TreeSet в зависимости от других вариантов использования.

0 голосов
/ 14 декабря 2011

Игнорирование того факта, что у вас должны быть классы в разных файлах без глобальных переменных в это время ...

/**
 * 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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...