How to Return Random Values in Java


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"));
    }
}