private void knuthGuess() {
		ColourCode[] knuthGuess = null;
		if (this.guessNum == 1) {
			this.possibleGuesses = generatePossibleGuesses(generateInitialCodes(), this.codeLength-1);
			this.guess = new CodeObject();
			knuthGuess = new ColourCode[this.codeLength];
			if (this.colourLength == 1) {
				for (int i = 0; i < this.codeLength; i++) {
					this.guess.addColour(ColourCode.values()[1]);
				}
			} else if (this.codeLength == 4 && this.colourLength >= 2/* && this.colourLength <= 6*/) {
				this.guess.addColour(ColourCode.values()[1]);
				this.guess.addColour(ColourCode.values()[1]);
				this.guess.addColour(ColourCode.values()[2]);
				this.guess.addColour(ColourCode.values()[2]);
			} else {
				for (int i = 0; i < this.codeLength; i++) {
					int colourCode = i+1;
					while (colourCode > this.colourLength) {
						colourCode -= this.colourLength;
					}
					this.guess.addColour(ColourCode.values()[colourCode]);
				}
			}
			
			for (int i = 0; i < this.codeLength; i++) {
				knuthGuess[i] = this.guess.getColour(i);
			}
			
			
		} else {
			if (this.possibleGuesses.size() > 1000) {
				this.guess = this.possibleGuesses.get(this.random.nextInt(this.possibleGuesses.size()));
				knuthGuess = new ColourCode[this.codeLength];
				for (int i = 0; i < this.codeLength; i++) {
					knuthGuess[i] = this.guess.getColour(i);
				}
			} else {
				ArrayList<Integer> numberRemoved = new ArrayList<Integer>();
			
				int maxRem = 0;
				for (int i = 0; i < this.possibleGuesses.size(); i++) {
					int numRem = 0;
					for (int j = 0; j < this.possibleGuesses.size(); j++) {
						for (int poscoltemp = 0; poscoltemp < this.codeLength; poscoltemp++) {
							for (int coltemp = 0; coltemp < this.codeLength; coltemp++) {
								if (!checkPossible(this.possibleGuesses.get(i), poscoltemp, coltemp, this.possibleGuesses.get(j))) {
									numRem++;
								}
							}
						}
					}
					maxRem = Math.max(numRem, maxRem);
					numberRemoved.add(numRem);
				}
			
				if (maxRem == 0) {
					return;
				}
			
				for (int i = 0; i < numberRemoved.size(); i++) {
					knuthGuess = new ColourCode[this.codeLength];
					if (maxRem == numberRemoved.get(i)) {
						this.guess = this.possibleGuesses.get(i);
					
						for (int j = 0; j < this.codeLength; j++) {
					
							knuthGuess[j] = this.guess.getColour(j);
						}
						break;
					}
				}
			}
		}
		this.guimain.slots.setColumn(this.guimain.curColumn, knuthGuess);
	}