UML Class Diagram for Contender added
Step 1 of refactoring the fight mechanic, changed the data type to be Contender for both Contenders
Step 2 of refactoring the fight mechanic - moved fighting into new League class, passing it the two contenders
Step 3 of refactoring the fight mechanic - updated to pass the contenders as an ArrayList to the League class
Step 4 of refactoring the fight mechanic - full contenders list sent to League class, random contender match up added to League class and RedRobo got a new name "Boo Boo" to match his friend "Yogi Bear" in the BlueRobo. Additionally added an "Unpaid Extra" contender to be added to the contenders list in case the list is an odd number.
Step 5 of refactoring the fight mechanic - moved the making of the full contenders list into a private method called getContenders() which returns the ArrayList with all the contenders for use in the league class
Step 6 of refactoring the fight mechanic - encapsulated the damage variable inside the attack method of the contender, so now when attacking use the attack() method and it will return an int value
Step 7 of refactoring the fight mechanic - refactored the damage variable to attackPower in Contender class and all contender classes, created a new defensePower variable. Encapsulated the health variable inside the hit() method for reducing the healht value by the damage it gets passed into it as an in and a new getHealth() method for returning the current health as an int. Updated the League class to use these new methods.
Step 8 of refactoring the fight mechanic - bug fix from last commit, Contender b now actually hits his opponent - also added the "Mutual Annihilation" condition to the final fight result.
Step 9 of refactoring the fight mechanic - a lot of changes done here to League and Contender classes as well as minor changes to the Blue and Red robo classes which are now renamed to YogiBear and BooBoo contenders. Full details listed below:

(League.java)
MAX_ROUNDS variable added to limit the fights to this number, set to 200 (tested with Yogi Bear vs. BooBoo fight in which BooBoo wins by K.O. after 199 rounds)
roundCount added to while loop for fight, breaks out of fight if roundCount hits MAX_ROUNDS
whole fight mechanic updated to the new rules of attack or defend each round, this creates 4 possible outcomes of a round 1. both attack, 2. A attacks and B defends, 3. A defends and B attacks and 4. both defend
roundCount used in outcome determination to add new possibilities of "jury decision" when MAX_ROUNDS is reached the remaining health of the players is used to determine the winner
NOTE: A known limitation of the "jury decision" happens if both players defend and reach MAX rounds Contender B is declared the winner, the solution for this would be to introduce another variable to track damage delt as a 2nd metric for announcing a winner, at this point it remains random as Contender A vs B is selected randomly.
added additional initialisation of Contender Joe and Bob in case no contenders are around - use this also to test the "jury decision" draw scenario

(Contender.java)
MAX_HEALTH variable added to be used in health heal cap - so Contender can heal up past 100
energy variable added and set to 40
energyDrain variable added, set to 0 by default but updated in the new energyCheck() method
hit(int damage) method updated to run the new energyCheck() method and added output to console
energyCheck() method added to either damage or heal the Contender based on energy usage, works on H = (E<40) ? H + (40 - E) : H - (E - 40) where 40 is the MAX_ENERGY
AI() method added to have automatic behaviour of attack then defend then restart and repeat

(BlueRobo.java -> renamed to -> YogiBear.java)
Yogi Bear modified to have a defensePower of 25 and a weaker attack of 15
@Override added to the AI() method to make Yogi Bear always attack each round

(RedRobo.java -> renamed to -> BooBoo.java)
BooBoo modified to have a weaker attack of 1 to help test the healing mechanic
UML from John added