Cześć, macie jakiś pomysł na wygenerowanie rozwiązanego Sudoku (liczby nie mogą się powtórzyć w żadnym z dziewięciu kwadratów, ani w żadnym rzędzie i kolumnie). Jedyne co osiągnąłem od środy to coś takiego:
import java.util.*;
public class ReadyBoard {
private static final List<Integer> numbers = new ArrayList<>();
private static final List<String> elements = new ArrayList<>();
private static final Random random = new Random();
private static final String[] initialElements = {" 1 ", " 2 ", " 3 ", " 4 ", " 5 ", " 6 ", " 7 ", " 8 ", " 9 "};
private static final int MAX_SQUARE_SIZE = 9;
private static final Board readyBoard = new Board();
private int randomElementNumber;
private int randomPosition;
private String playerMove;
private boolean loopRun = true;
public String[][] drawBoard() {
generateSquareOne();
for (int i = 0; i < readyBoard.newBoard().length; i++) {
for (int j = 0; j < readyBoard.newBoard().length; j++) {
System.out.print(readyBoard.newBoard()[i][j]);
}
System.out.println();
}
return readyBoard.newBoard();
}
private void generateSquareOne() {
while (loopRun) {
randomElementNumber = random.nextInt(initialElements.length);
playerMove = "";
playerMove = playerMove + initialElements[randomElementNumber];
while (elements.contains(playerMove)) {
randomElementNumber = random.nextInt(initialElements.length);
playerMove = "";
playerMove = playerMove + initialElements[randomElementNumber];
}
randomPosition = random.nextInt(initialElements.length);
while (numbers.contains(randomPosition)) {
randomPosition = random.nextInt(initialElements.length);
}
switch (randomPosition) {
case 0:
readyBoard.newBoard()[1][1] = playerMove;
break;
case 1:
readyBoard.newBoard()[1][2] = playerMove;
break;
case 2:
readyBoard.newBoard()[1][3] = playerMove;
break;
case 3:
readyBoard.newBoard()[2][1] = playerMove;
break;
case 4:
readyBoard.newBoard()[2][2] = playerMove;
break;
case 5:
readyBoard.newBoard()[2][3] = playerMove;
break;
case 6:
readyBoard.newBoard()[3][1] = playerMove;
break;
case 7:
readyBoard.newBoard()[3][2] = playerMove;
break;
case 8:
readyBoard.newBoard()[3][3] = playerMove;
break;
}
numbers.add(randomPosition);
elements.add(playerMove);
if (numbers.size() == MAX_SQUARE_SIZE && elements.size() == MAX_SQUARE_SIZE) {
loopRun = false;
}
}
}
//UZYWAJAC KOLEKCJI HASSET:
//JEZELI ROZMIAR KAZDEGO Z KWADRATÓW NIE JEST RÓWNY 9
//I ROZMIAR KAZDEGO RZEDU I KAZDEJ KOLUMNY TEZ NIE JEST ROWNY 9
//I KTORYS Z KWADRATOW ZAWIERA PUSTE POLE: " "
//TO MA LOSOWAC LICZBY PONOWNIE
}
Bo jak miałbym zrobić to w ten sposób, to wyszło by mi zaraz z 1400 linii...