Cita:  System.out.println("Introduce una fecha.");
                        fecha=teclado.next();
                        System.out.println(arrGuardias.size());
                        for (Guardias p:x.arrGuardias){
                            System.out.println("Holadentro");
                            Guardias guardia=new Guardias(fecha);
                            x.arrGuardias.add(p);
                            arrGuardias.add(p);
 
                            System.out.println(arrGuardias.size());
                        }
                        System.out.println(arrGuardias.size());
    Que te dans los "println" al ejecutarse este código?
Por qué añades al array p en lugar de guardia?
Por qué añades a x.arrGuardias que es el array que estás recorriendo.
Por qué recorres x.arrGuarda si lo unico que quieres es añadir una fecha de guardia al array? 
Y sobre todo:
Por qué llamas x a las farmacias y p a las guardias? es algún tipo de encriptación/ofuscación de código? 
 
Un saludo