Alkeet tökkii

En ymmärrä, miten tämä toimii, ovatko merkkitaulussa merkit vai niiden esiintymisten määrä?

public class esiintymiset
{
public static void main(String[] args)
{
Kirjoita.println("\nSyötä merkkijono:");
String sMerkit = Lue.rivi();

int[] merkkitaulu = new int[65535];
int i;

for (i = 0; i < sMerkit.length(); i )
merkkitaulu[sMerkit.charAt(i)] ; / /tämä ei mene jakeluun, voisko joku kommentoida

// miten ohjelma toimii jos merkkijono on vaikkapa: vaania
// mihin järjestykseen ja millä indekseillä nämä esiintymiset sijoittuvat merkkitauluun

for (i = 0; i < 65535; i )
if (merkkitaulu[i] > 0)
   System.out.println("Merkki '" (char)i "' esiintyi " merkkitaulu[i] " kertaa.");
}

}
5610
Äänestä

Muut lukivat myös

Vastaukset 5

Vanhimmat

merkkitaulussa on esiintymisten lukumäärä

Äänestä
  • Käytä rivillä:

    System.out.println("Merkki '" (char)i "' esiintyi " merkkitaulu[i] " kertaa.");

    metodia sMerkit.charAt(i)

    Äänestä

  • juu kirjoitti:

    Käytä rivillä:

    System.out.println("Merkki '" (char)i "' esiintyi " merkkitaulu[i] " kertaa.");

    metodia sMerkit.charAt(i)

    Ei kannata käyttää ellei sitten poikkeutuksia halua opiskella ;-)

    Äänestä

Siellä merkkitaulussa on ohjelman lopuksi juuri se merkkien esiintymisten määrä.

Kun merkkijono (sMerkit) on "vaania" joka numeroin ilmaistuna on 118, 97, 97, 110, 105 ja 97. Merkkijonon pituus (sMerkit.length()) on tällöin 6. Ohjelma käy siis silmukssa läpi kaikki merkkit merkkijonosta ja kasvattaa aina kyseisen merkin osoittamaa merkkitaulun (solun) arvoa yhdellä. Kyseinen silmukkahan voidaan kirjoittaa myös seuraavasti:

--- ALKU ---

char merkki;

for (i = 0; i < sMerkit.length(); i ) {
merkki = sMerkit.charAt(i);
merkkitaulu[merkki] = merkkitaulu[merkki] 1;
}

--- LOPPU ---

Ja tulos on siis:

Merkki 'a' esiintyi 3 kertaa.
Merkki 'i' esiintyi 1 kertaa.
Merkki 'n' esiintyi 1 kertaa.
Merkki 'v' esiintyi 1 kertaa.


Muuta tulostus rivi esimimerkiksi seuraavaksi:

System.out.println("Merkki '" (char)i "' (koodi: " i ") esiintyi " merkkitaulu[i] " kertaa.");

Tällöin saat myös kirjainten koodit näkymään. Tällöin tulos olisi seuraava:

Merkki 'a' (koodi: 97) esiintyi 3 kertaa.
Merkki 'i' (koodi: 105) esiintyi 1 kertaa.
Merkki 'n' (koodi: 110) esiintyi 1 kertaa.
Merkki 'v' (koodi: 118) esiintyi 1 kertaa.

- Huomaa että tulostus tapahtuu pienimmästä kirjain koodista suurempaan, eikä esiintymis järjestyksen/määrän mukaan.

Äänestä

Pienenä huomautuksena että char:n arvo alue on 0 - 65535. Char:lla pystytään ilmaisemaan siis 65536 luku arvoa. Ohjelmassasi pitäisi olla arvon 65535 tilalla arvo 65536.

Äänestä

Kommentoi aloitusta


ari.heinonsalmi kirjoitti:

En ymmärrä, miten tämä toimii, ovatko merkkitaulussa merkit vai niiden esiintymisten määrä?

public class esiintymiset
{
public static void main(String[] args)
{
Kirjoita.println("\nSyötä merkkijono:");
String sMerkit = Lue.rivi();

int[] merkkitaulu = new int[65535];
int i;

for (i = 0; i < sMerkit.length(); i )
merkkitaulu[sMerkit.charAt(i)] ; / /tämä ei mene jakeluun, voisko joku kommentoida

// miten ohjelma toimii jos merkkijono on vaikkapa: vaania
// mihin järjestykseen ja millä indekseillä nämä esiintymiset sijoittuvat merkkitauluun

for (i = 0; i < 65535; i )
if (merkkitaulu[i] > 0)
   System.out.println("Merkki '" (char)i "' esiintyi " merkkitaulu[i] " kertaa.");
}

}

Anonyymi
5000

Ilmoita asiaton sisältö

  • Sisältää materiaalia, joka on loukkaavaa, herjaavaa, rasistista, uhkailevaa tai ahdistelevaa.

  • Materiaali sisältää nimiä, yhteystietoja tai muita henkilökohtaisia tietoja. Julkisuuden henkilöistä, julkisissa viroissa toimivista ihmisistä sekä yritysten vastuuhenkilöistä saa keskustella työhön liittyen. Myös yksityiselämään liittyvistä asioista voi keskustella siltä osin, kuin niistä on julkisesti kerrottu.

  • Sisältää lapsille haitallista tai heiltä kiellettyä materiaalia. Seksuaalinen sisältö on sallittua aiheeseen tarkoitetuilla palstoilla, joiden ikäraja on 18 vuotta.

  • Lainvastaista sisältöä voi olla mm. yksityiselämää loukkaavan tiedon levitys, kiihottaminen kansanryhmää vastaan, laiton uhkaaminen, alaikäisiin liittyvä seksuaalinen sisältö/grooming, petokset, identiteettivarkaudet, kunnianloukkaukset ja tekijänoikeusrikkomukset.

  • Sisältö ei liity palstan tai keskusteluketjun aiheeseen.

  • Viesti ei ole suomea tai ruotsia (pl. International Forums), se sisältää mainontaa, se sisältää tekijänoikeuksin suojattua materiaalia, se on massapostitus tai jokin muu syy.

Jaa keskustelu