Je kent ongetwijfeld de Binairo puzzels. In deze opgave zul je een vereenvoudigde versie van een Binairo puzzel implementeren, genaamd de Takuzu1-puzzel. Het verschil met de bekende Binairo puzzels, is dat bij een Binairo geen 2 kolommen en rijen hetzelfde mogen zijn, bij een Takuzu is dit niet vereist.
Schrijf een Java-klasse Takuzu
. Deze klasse stelt een puzzel voor en moet volgende constructor en minstens volgende methoden bevatten. Je bent volledig vrij om de nodige instantievariabelen te kiezen en het is ook toegelaten (en aangeraden!) om extra methodes toe te voegen, dit kan je helpen bij het zoeken naar fouten.
De constructor heeft 1 argument:
size
: De grootte van de puzzel; dit stelt een rooster voor van size
rijen en size
kolommen.public Takuzu(int size)
Je klasse moet minstens onderstaande methoden hebben. Deze zijn gerangschikt in alfabetische volgorde, niet volgens moeilijkheid.
public String getCell(int row, int column)
Deze methode vraagt de waarde van de cel op rij row
, kolom column
op. Merk op dat zowel de rij als de kolom waarden tussen 1
en size
aannemen (en dus niet van 0
tot size-1
). Indien de cel leeg is, moet de methode null
teruggeven.
public String[] getColumn(int column)
Deze methode geeft een array van alle waarden in kolom column
terug, van boven naar onder. Merk op dat column
steeds een waarde tussen 1
en size
is. Voor cellen die nog geen waarde hebben, moet de array null
bevatten.
public String[] getRow(int row)
Deze methode geeft een array van alle waarden in rij row
terug, van links naar rechts. Merk op dat row
steeds een waarde tussen 1
en size
is. Voor cellen die nog geen waarde hebben, moet de array null
bevatten.
public boolean isCompleted()
Deze methode bepaalt of de puzzel volledig is ingevuld. Wanneer er geen lege vakjes meer zijn, geeft de puzzel true
terug, anders false
.
public boolean isEmpty(int row, int column)
Deze methode controleert of de cel op rij row
, kolom column
een waarde bevat. Merk op dat zowel de rij als de kolom waarden tussen 1
en size
aannemen (en dus niet van 0
tot size-1
). Indien de cel leeg is, moet de methode true
teruggeven, anders false
.
public boolean setCell(int row, int column, String value)
Deze methode vult de waarde value
in op rij row
, kolom column
in. Indien dit lukt, geeft de methode true
terug, anders false
. Het mag enkel mogelijk zijn om de waarde in te vullen als al volgende voorwaarden voldaan zijn:
value
is ofwel 0
ofwel 1
.public String toString()
Deze methode zet de puzzel om naar een string. Een voorbeeld van hoe deze string eruit moet zien, kan je vinden in de onderstaande voorbeelduitvoer (je kan dit simpelweg kopiëren en plakken).
Nu je alle regels hebt geïmplementeerd, kan je het effectieve verloop implementeren. Schrijf hiervoor een main
-methode, waarin je volgende pseudocode implementeert:
public static void main(String[] args) {
// lees de grootte van de puzzel in met een Scanner.
// maak een nieuwe instantie van de puzzel aan met de opgegeven grootte.
// zolang de puzzel niet ingevuld is {
// lees het volgende vakje in met een Scanner.
// lees de volgende waarde in met een Scanner.
// vul het vakje in met de gekozen waarde via de setCell methode.
// print de puzzel
// }
}
De tekst in het rood stelt invoer van de gebruiker voor en wordt logischerwijs niet uitgeprint door je programma.
Geef de grootte in: 2 Kies een vakje (rij,kolom). 1,1 Kies een cijfer (0 of 1). 0 ╔══╗ ║0.║ ║..║ ╚══╝ Kies een vakje (rij,kolom). 1,2 Kies een cijfer (0 of 1). 1 ╔══╗ ║01║ ║..║ ╚══╝ Kies een vakje (rij,kolom). 2,2 Kies een cijfer (0 of 1). 0 ╔══╗ ║01║ ║.0║ ╚══╝ Kies een vakje (rij,kolom). 2,1 Kies een cijfer (0 of 1). 1 ╔══╗ ║01║ ║10║ ╚══╝
String
s weergegeven in plaats van door int
s, zoals je misschien zou verwachten. De reden hiervoor is dat null
bij een int
niet bestaat (dit is gelijk aan het getal 0
), waardoor het niet duidelijk zou zijn wanneer een cel leeg is en wanneer ze het getal 0
bevat.Integer.parseInt()
kan je een String
naar een int
omzetten.