The challenge
Ghost objects are instantiated without any arguments.
Ghost objects are given a random color attribute of white" or “yellow” or “purple” or “red” when instantiated
Ghost ghost = new Ghost();
ghost.getColor(); //=> "white" or "yellow" or "purple" or "red"
All this challenge is really asking us to do is to create a class method that can return random colour strings when called.
The solution in Java
We make use of the java.util.Random
class to generate a couple of random values for us to use within a switch
statement.
In each switch case
, we can return one of our colours as desired.
import java.util.Random;
public class Ghost {
public String getColor() {
Random rand = new Random();
switch(rand.nextInt(4)+1) {
case 1:
return "yellow";
case 2:
return "white";
case 3:
return "purple";
case 4:
return "red";
}
return "white";
}
}
An even more succinct way to do this could be as follows:
public class Ghost {
private final String[] colors = {"white", "yellow", "purple", "red"};
public Ghost() {
}
public String getColor() {
return colors[(int)(Math.random() * colors.length)];
}
}
Test cases to validate our approach
import org.junit.Test;
import static org.junit.Assert.assertEquals;
import java.util.ArrayList;
public class GhostTests {
private ArrayList ghostColors = new ArrayList();
public GhostTests() {
for (int i = 1; i <= 100; i++) {
ghostColors.add(new Ghost().getColor());
}
}
private Boolean ghostColor(ArrayList ghostColors, String color) {
Boolean answer = false;
for (int i = 0; i < ghostColors.size(); i++) {
if (ghostColors.get(i) == color) {
answer = true;
break;
}
}
return answer;
};
@Test
public void should_sometimes_make_white_ghosts() throws Exception {
assertEquals("No white ghost found.", true, ghostColor(ghostColors, "white"));
}
@Test
public void should_sometimes_make_yellow_ghosts() throws Exception {
assertEquals("No yellow ghost found.", true, ghostColor(ghostColors, "yellow"));
}
@Test
public void should_sometimes_make_purple_ghosts() throws Exception {
assertEquals("No purple ghost found.", true, ghostColor(ghostColors, "purple"));
}
@Test
public void should_sometimes_make_red_ghosts() throws Exception {
assertEquals("No red ghost found.", true, ghostColor(ghostColors, "red"));
}
}