public class ArvausJono { private char[] merkit; private boolean[] tunnettu; public ArvausJono(String mjono) { // otetaan talteen merkkijonon pituus (merkkien määrä) int length = mjono.length(); // tehdään tyhjät taulukot merkkijonon pituisiksi char[] merkit = new char[length]; boolean[] tunnettu = new boolean[length]; // alustetaan taulukoiden arvot for (int i = 0; i < length; i++) { merkit[i] = 0; // tätä ei välttämättä tarvitse, pitäisi olla nollia tunnettu[i] = false; // periaatteessa myös boolean on false ilman alustusta, mutta selkeämpää alustaa kaikki taulukota, niin tietää ainakin mitä niissä on } } public boolean loytyy(char kirjain) { int i; boolean loytyy = false; if (this.merkit.length > 0) { for (i = 0; i < this.merkit.length; i++) { if (kirjain == this.merkit[i] && this.tunnettu[i] == false) { this.merkit[i] = kirjain; this.tunnettu[i] = true; // ei lopeteta (return) vielä tässä, vaan merkataan loytyy-muuttujaan, että kirjaimia on löytynyt, jotta kaikki voidaan merkata loytyy = true; } // Tässä ei saa olla else-lohkoa, eikä pidä palata, vaan koko merkkijono pitää käydä läpi aina } } return loytyy; } public boolean kaikkiLoydetty() { boolean kaikki; int i; // Tässä oli enemmänkin häikkää // Ideana on käydä kaikki kirjaimet läpi // ja palauttaa false heti kun yksikin kirjain on löytämättä eli tunnettu[i] == false // Jos falseja ei löydy, kaikki on löydetty ja voidaan palauttaa true for (i = 0; i < this.merkit.length; i++) { if (this.tunnettu[i] == false) { return false; // loppuja ei tarvitse testata, kun kaikkia ei jokatapauksessa ole nyt löydetty } } return true; // Yhtään falsea ei ollut, kaikki löydetty } public String toString() { String jono = ""; for (int i = 0; i < ArvausJono.length; i++) { if (loytyy(mjono[i]) = false) jono[i] = jono[i] + "_"; else jono[i] = jono[i] + merkit; } return jono; } }