Лог c, который вы используете для поиска закороченной очереди, неясен.
Сначала вы устанавливаете предел поиска равным int size = entry.getValue().size() +1;
, что является размером первого элемента в итераторе плюс один .
Затем вы используете if (vetsAndQueue.getValue().size() <= size)
, чтобы найти самую короткую очередь. В большинстве случаев он просто сталкивается с одним и тем же первым элементом в итераторе и просто сталкивается с блоком if, и питомец будет напрямую поставлен в очередь. Вот почему питомец всегда находится в одной и той же очереди.
Определение переменной size
не имеет смысла, поскольку у вас нет гарантии, что первая очередь в vetMap имеет наименьший размер.
Так же, как другие ответили, вам просто нужно подождать, пока вы не найдете самую короткую очередь, за которой последует ваш питомец. Это могло бы выглядеть так:
static void admitPatient(Map<Integer, Pet> readPets, HashMap<String, PetQueue> vetMap) {
if (vetMap.isEmpty()) {
System.out.println("No vets are currently checked in.");
} else {
System.out.print("Enter the pet's id number: ");
int petID = Integer.parseInt(keyb.nextLine());
Pet p1 = readPets.get(petID);
if (p1 != null) {
Map.Entry<String, PetQueue> shortestQueueVet = null;
Map.Entry<String, PetQueue> entry = vetMap.entrySet().iterator().next();
//System.out.println(entry);
int size = entry.getValue().size();
String drName = "";
System.out.println("size" + size);
for (Map.Entry<String, PetQueue> vetsAndQueue : vetMap.entrySet()) {
if (vetsAndQueue.getValue().size() < size){// here keep finding shortest queue
size = vetsAndQueue.getValue().size();
shortestQueueVet = vetsAndQueue;
}
}
shortestQueueVet.getValue().enqueue(p1);
drName = shortestQueueVet.getKey();
//vetMap.put(drName, shortestQueue); ##you don't need to re-put the element since the key remains unchanged
System.out.printf("%s will see Dr. %s\n", p1, drName);
}else{
System.out.printf("No pet found with ID %d\n", petID);
}
}
}
}