Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: Java sanasta merkin haku ja vertaaminen

Timpma60 [01.04.2019 08:42:19]

#

Tämä metodi on ohjelmassa, jossa käyttäjä yrittää arvata luokassa arvotun sanan (arvattava) kirjaimia. Metodissa verrataan sanan kirjaimia parametrina annettuun arvaukseen (merkki).

Ohjelma vertaa nyt oikein vain sanan ensimmäiseen kirjaimeen, muuten antaa aina false eli ilmeisesti ei vertaa muita kirjaimia? Onkohan vika tässä metodissa, puuttuneeko siitä jotakin?

Kiitos!

public boolean arvaa(Character merkki) {

       int i;

       for (i = 0; i < arvattava.length(); i++) {
           if (merkki == arvattava.charAt(i)) {
               return true;

           }else if (merkki != arvattava.charAt(i)) {

               return false;
           }

       }
       return true;
   }

Teuro [01.04.2019 09:27:54]

#

Funktiolle pitäisi varmastikin antaa yhden merkin sijasta kokonainen merkkijono. Tarkistuksessa pitäisi verrata annetun merkkijonon merkkejä arvattavan merkkijonon kirjaimiin.

EDIT: pahoittelut luin hiukan heikosti.

else if kohdassa palautat falsen, jos kirjain ei ole sama kuin vuorossa oleva kirjain. Onko tämä haluttu ominaisuus? Eli siis jos arvatava sana on "arvaa", niin miten ohjelman tulisi reagoida? Jos käyttäjä syöttää kirjaimen "a" funktio palauttaa true. Miten jatketaan tästä eteenpäin?

Silmukan tulisi seuraavalla kierroksella alkaa kohdasta 1, jotta voidaan tarkistaa seuraava merkki. Tosin tällöin koko silmukkaa on itse asiassa tarpeeton. Pidät vain muistissa mitkä merkit on jo arvattu oikein ja tarkistat sen mukaan seuraavaa merkkiä.

Jos taas toimitaan kuten hirsipuussa yleensä, niin jätä vain tuo else if kohta pois, mutta sitten pitäisi tarkistaa koko sana ja merkitä johonkin taulukkoon ne arvattavan sanan indeksi, jotka olivat arvauksen kanssa oikein.

maka78 [02.04.2019 08:24:32]

#

Joo siis jos haluat verrata, että löytyykö käyttäjän arvaama merkki ylipäätään arvattavasta merkkijonosta niin seuraava toimii:

public boolean arvaa(Character merkki){

   //käydään merkkijonon kaikki merkit läpi for silmukassa
   for(int i = 0; i < arvattava.length(); i++){

     if(merkki == arvattava.charAt(i)){

         return true;//jos arvattu merkki löytyy merkkijonosta palautetaan true
     }

   }
   //jos arvattua merkkiä ei löytynyt for silmukassa niin palautetaan false
   return false;

}

Hirsipuumainen toiminta vaatii sitten jo aika paljon enenmmän, koska sama merkkihän voi esiintyä sanassa useammin kuin kerran ja toisaalta myöskään samaa merkkiä ei voi arvata uudelleen.

Edit: Hirsipuuratkaisussa voisi käyttää suoraan merkkijonoa joka alustetaan arvattavan sanan merkkien määrällä '_'-merkkejä.
Jos merkki löytyy arvattavasta sanasta, niin vaihdetaan ko. indeksin '_' merkki oikealla kirjaimella. Näin pysyy jo arvattujen merkkien indexit ja merkitkin näpissä ja voidaan myös tulostaa pelitilanne näytölle.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta