Kezdőoldal » Számítástechnika » Programozás » Ezt a feladatot kaptam JAVA...

Ezt a feladatot kaptam JAVA órán de nem nagyon tudom megoldani. Készítsen egy programot, ami megszámolja, hogy az adott szövegben melyik karakterből hány darab van? Például: „Example Text”.

Figyelt kérdés
2020. ápr. 5. 16:53
1 2 3
 11/24 anonim ***** válasza:

Nem értem a kérdést. Honnan máshonnan vehetném a string karaktereit, mint a stringből?

Az, hogy milyen formában tárolom az előfordulásukat meg nyilván attól függ, hogy ASCII vagy Unicode stringről van szó, illetve ezek milyen értékkészletéről.

2020. ápr. 7. 15:34
Hasznos számodra ez a válasz?
 12/24 anonim ***** válasza:

Mivel a kérdező ezekről nem adott semmi infót, én így nem tudom megmondani, hogy mi lenne hatékony.

Te gondolom feltételeztél valamit, amihez 65536 méretű tömbre van szükség.

Arra vagyok kíváncsi, hogy mi ez a feltételezés.

2020. ápr. 7. 15:44
Hasznos számodra ez a válasz?
 13/24 anonim ***** válasza:

Te milyen ASCII vagy Unicode strignről beszélsz?

Javaban van a java.lang.String osztály... ennek az elemeit lehet a charAt() metódusal lekérni. Ez 0 és 65535 közötti értéket vehet fel. Ezért a korábbi feltételezés.


Ha máshogyan nyerjük ki a karaktereket, akkor nyilván ennek megfelelően más méretű tömbre lehet szükség.


Pontosítok, te _hogyan_ vennéd ki a stringből a karaktereket? Már ha egyáltalán java.lang.String objektumről van szó, de ezt csak a kérdező tudja megmondani.

2020. ápr. 7. 16:41
Hasznos számodra ez a válasz?
 14/24 anonim ***** válasza:

Az ASCII karakterkészlet 128 karakter ugye (extended ASCII-vel együtt 256), tehát ilyen méretű tömbre van maximum szükség.

Ha tovább szűkítjük, mondjuk angol ABC kisbetűire, akkor nyilván csak 26-ra.


Ha nem szűkítjük, hanem bővítjük, akkor jönnek ugye az Unicode karakterek, pl. ékezetes betűk, japán írásjelek stb. Ezekből van több, mint egy millió, így olyanok is, amik bele sem férnek egy darab 16 bites charba.

Ezért van, hogy a következő stringnél pl. a length metódus 2-t ad vissza, nem 1-et:

String s = "𛄔";

És a következő is működik:

System.out.println(s.charAt(0));

System.out.println(s.charAt(1));

Mivel 2 char-ból áll a codepoint.


Arra vagyok kíváncsi, hogy utóbbi esetben hogy számolnád meg a karaktereket a charAt metódust használva, az előbbiben pedig miért van szükség 65536 méretű tömbre.

Vagy milyen karakterkészletet feltételezel, amihez a 65536 méretű tömb jó optimális.

2020. ápr. 7. 17:32
Hasznos számodra ez a válasz?
 15/24 anonim ***** válasza:
(-jó az uccsó mondat végéről)
2020. ápr. 7. 17:38
Hasznos számodra ez a válasz?
 16/24 anonim ***** válasza:

Akkora tömb kell, amekkora a legnagyobb karakter kódja. De ezt már írtam. Azt is többször írtam, hogy honnan jön a 65536-os szám. Feltételezem, hogy a más által írt Map-es megoldás azt csinálná, hogy string.length()-ig ciklusban lekéri a kódokat charAt metódussal. Ennek megfelelően írtam a méretet.

Lehet, hogy több millió japán írásjel van, de az aktuális Unikcode verzióban csak 143 ezer karakter van. Szóval olyanokról beszéléni felesleges, hogy mi lesz, ha.. lehet, hogy egyszer majd nem lesz elég 32 bit sem a karakter kódokhoz.


Te milyen megoldást javasolsz? Mert a tömb a map alternatívája, de ha nem tudjuk milyen tipusú lenne a map kulcsa (char, int, bármi egyéb?) addig nem tudunk tovább jutni. Épp ezért kérdeztem, hogy te hogyan vennéd ki a string karaktereit? Milyen változóban kapnád meg a karaktert? String objektumban ami 1 karakternyi adatot tartalmaz, legyen az akárhány byte, akárhány char? Oké, akkor lehet egy Map<String, Integer/Long>-ba gyűjteni.


Szerintem feleslegesen bonyolítod túl a dolgokat.

2020. ápr. 7. 18:46
Hasznos számodra ez a válasz?
 17/24 anonim ***** válasza:

A japán írásjel egy példa volt a millióból, nem az a lényeg.

De tessék, első hozzászólás:

https://www.gyakorikerdesek.hu/allatok__madarak__10408288-a-..


Vagy mondjuk egy chat app sora:

String s = "😈😈😈 jajj de vicces vagyok 😃😎";


Itt hogy számolod meg a karaktereket 65536 méretű int tömbben?


"Te milyen megoldást javasolsz?"


Semmilyet, írtam már, hogy nem tudom milyen karakterkészletről van szó, így pontosítás nélkül nem tudok javasolni jó megoldást.

Feltételezni lehet nyilván, ha feltételezem, hogy mondjuk a kérdező kezdő és ez valamilyen iskolai feladat, a példa alapján pedig angol ABC kis és nagybetűk, szóköz, meg mondjuk írásjelek, akkor egy ~90 (nincs meg fejben az ASCII tábla sajnos) méretű tömböt használnék valszeg.

2020. ápr. 7. 19:04
Hasznos számodra ez a válasz?
 18/24 anonim ***** válasza:

Az általad írt stringben semmi problémás karakter nincs, simán megszámolhatod az általam írt megoldással.


A ~90 méretű tömbbel, ami csak a ténylegsen szükséges karakterek számát jelenti az a probléma, hogy nehéz index-et számolni (pl hogy az 'a' legyen a 0, 'b' az 1, stb.) a karakterből. Ezért szerencsésebb lenne már akkor Max(charcode)+1 méretű tömböt használni, hogy tudj egyszerűen az karakter kódjával indexelni.

2020. ápr. 7. 19:13
Hasznos számodra ez a válasz?
 19/24 anonim ***** válasza:

"Az általad írt stringben semmi problémás karakter nincs, simán megszámolhatod az általam írt megoldással"


Hogyan? Mutatsz egy rövid példát rá?

Ami 65536 méretű int tömböt és charAt metódust használva megszámolja mondjuk a 😈 karaktereket.

2020. ápr. 7. 19:29
Hasznos számodra ez a válasz?
 20/24 anonim ***** válasza:
Pontosabban minden karaktert, hogy ne térjünk el a feladattól.
2020. ápr. 7. 19:37
Hasznos számodra ez a válasz?
1 2 3

Kapcsolódó kérdések:





Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!