It may be part of Java’s shady black magic when managing memory for you. Try creating a new set object inside the for loop like so?
String[][] setsOnBoard(String[] cards, int numOfCards, String blank) {
String[][] sets = new String[0][3];
for (int i = 0; i < numOfCards - 2; i++) {
if (cards[i] == blank) {
continue;
}
for (int j = i + 1; j < numOfCards - 1; j++) {
if (cards[j] == blank) {
continue;
}
for (int k = j + 1; k < numOfCards; k++) {
if (cards[k] == blank) {
continue;
}
String[] threeCards = new String[3];
threeCards[0] = cards[i];
threeCards[1] = cards[j];
threeCards[2] = cards[k];
if (checkSet(threeCards)) {
sets = (String[][])append(sets, threeCards);
println(sets[0]);
}
}
}
}
println(sets[0]);
return sets;
}