public boolean pickAndExecuteAnAction() {

		try{
		for(int j = 0; j < Waiters.size(); j++){
			//print("" +Waiters.get(j).ws);
			if(Waiters.get(j).ws == WaiterState.wantToGoOnBreak){
				answerWaiter(Waiters.get(j));			
	
				return true;
			}
		}
		
		for (Table table : tables) {
			
			if (!table.isOccupied()) {
				for(int i = 0; i < theCustomers.size(); i++){
					if(theCustomers.get(i).s == CustomerState.waiting){
						
						AssignWaiter(theCustomers.get(i), table);//the action
						return true;//return true to the abstract agent to reinvoke the scheduler.
					}
				}	
				
			}
		}	
		

		return false;
		}
		
		catch(ConcurrentModificationException e){
			return false;
		}
		//we have tried all our rules and found
		//nothing to do. So return false to main loop of abstract agent
		//and wait.
	}