code: public class GameNumber extends AbstractGuessNumber {
  
      public GameNumber() {
          super(4);
          defineNumber();
      }
  
      public static boolean isGuess(int[] digits) {
          return (digits != null && isUnique(digits) && isAllDigits(digits));
      }
  
      protected static boolean isAllDigits(int[] array) {
          for (int i = 0; i < array.length; i++) {
              char digit = (char) (array[i] + '0');
  
              if (!Character.isDigit(digit)) {
                  return false;
              }
          }
          return true;
      }
  
      protected static boolean isUnique(int[] array) {
          for (int j = 0; j < array.length; j++) {
              int a = array[j];
  
              for (int i = 0; i < j; i++) {
                  if (a == array[i]) {
                      // seen this int before
                      return false;
                  }
              }
          }
          return true;
      }
  
      public static int[] parseDigits(int number, int length) {
          int[] arr = new int[length];
          int temp = number;
          for (int i = length - 1; i >= 0; i--) {
              arr[i] = temp % 10;
              temp /= 10;
          }
          return arr;
      }
  
      protected void defineNumber() {
          int[] arr = generateRandom();
  
          for (int i = 0; i < getLength(); i++) {
              digits[i] = arr[i];
          }
      }
  
      private int[] generateRandom() {
          int[] arr;
          do {
              Random random = new Random();
              int number = random.nextInt(9877) + 123;
              arr = parseDigits(number, getLength());
          } while (!isGuess(arr));
          return arr;
      }
  
      @Override
      public String toString() {
          return Arrays.toString(digits);
      }
  }
  