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.");
}
}
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.");
}
}
Vastaukset 5
Vanhimmat
merkkitaulussa on esiintymisten lukumäärä
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 ;-)
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.
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.