Your DICTIONARY should be an array of chars, not an array of String. Actually, I quite like just the String option...
private static final Stringchar[] DICTIONARYDIGITS = ("0123456789"
+ "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
+ "abcdefghijklmnopqrstuvwxzy";"abcdefghijklmnopqrstuvwxyz").toCharArray();
private static final int MaxNumberBASE = 238328;DIGITS.length;
private static final int baseMAX_NUMBER = DICTIONARY.length();BASE * BASE * BASE;
public static String generateCode(int num) {
if (num < 1 || num > MaxNumberMAX_NUMBER) {
throw new IllegalArgumentException("Illegal input value: " + num);
}
int value = num - 1;
char ac = DICTIONARY.charAt(DIGITS[((value / baseBASE) / baseBASE) % base);BASE];
char bc = DICTIONARY.charAt(DIGITS[(value / baseBASE) % base);BASE];
char cc = DICTIONARY.charAt(valueDIGITS[value % base);BASE];
return new String(new char[]{ac, bc, cc});
}
Further, when running the code,Further, when running the code, I discovered that you are off on your - I discovered that you are off on your zzz assertion .... the max value you propose for zzz is wrong, what you have is yyy.zzz assertion .... the max value you propose forI had a text transpose of zzzzy is wrong, what you have isinstead of yyyyz in my constant.
See the code running on ideone: https://ideone.com/ZPS6fehttps://ideone.com/EZqXlJ
Value 0 Error Illegal input value: 0
Value 1: 000
Value 2: 001
Value 62: 00z
Value 63: 010
Value 1000: 0G7
Value 238328: yyyzzz
Value 238329 Error Illegal input value: 238329