private Color[] nextNonFirstGuess() { int i = 0; boolean guessFound = false; while (i < table.nrColumns && !guessFound) { if (manager.thereIsNextColor(lastGuess[i])) { lastGuess[i] = manager.nextColor(lastGuess[i]); guessFound = true; } else { lastGuess[i] = manager.firstColor(); i++; } } if (guessFound) { return lastGuess; } else { return none; } }
/** * Calculate the next guess and return a new Guess object. * The guesses are ordered in the order of the colors as * specified by the color manager. * * @param manager that specifies the order of the colors * an can return the next color after one color. * @return the guess that comes after this guess. */ public Guess nextGuess(ColorManager manager) { final Color[] colors = Arrays.copyOf(this.colors, nrOfColumns()); int i = 0; boolean guessFound = false; while (i < colors.length && !guessFound) { if (manager.thereIsNextColor(getColor(i))) { colors[i] = manager.nextColor(colors[i]); guessFound = true; } else { colors[i] = manager.firstColor(); i++; } } if (guessFound) { return new Guess(colors); } else { return Guess.none; } }
@Test public void noNextColorIsNullWhenThereIsOne() { ColorManager manager = new ColorManager(NR_COLORS, Color::new); Color color = manager.firstColor(); while (manager.thereIsNextColor(color)) { Assert.assertNotNull(color = manager.nextColor(color)); } }
@Test public void noNextColorIsNullWhenThereIsOne() { ColorManager manager = new ColorManager(NR_COLORS); Color color = manager.firstColor(); while ( manager.thereIsNextColor(color)) { Assert.assertNotNull(color = manager.nextColor(color)); } }
private Guess nextIntervalStart(Color[] colors) { final int index = colors.length - 1; int step = NR_COLORS / nrThreads; if (step == 0) { step = 1; } while (step > 0) { if (manager.thereIsNextColor(colors[index])) { colors[index] = manager.nextColor(colors[index]); step--; } else { return Guess.none; } } Guess guess = new Guess(colors); while (!guess.isUnique()) { guess = guess.nextGuess(manager); } return guess; } }