Portál AbcLinuxu, 12. května 2025 08:30
Řešení dotazu:
IllegalAccessError
bych dal pryč a dal tam IOException
(do vnějšího ošetření) a co se týče ošetření to, dle mého, splní zadání
ad. stimhle mam problem, nevim ktera vyjimka to je?
Bych to v tomto případě viděl jen na vyjímku IOException
V Java API dokumentacii pre BufferedReader methodu read sa pise o IOException:
IOException - If an I/O error occursUrcite by si mal osetrit tuto vynimku. A na koniec mozes osetrit aj vseobecnu Exception, od ktorej su odvodene vsetky ostatne vynimky.
FileNotFoundException
−> Pokud soubor neexistujeIOException
−> Pokud soubor nebude možné čístException
−> Nastane-li jakákoli jiná chybaFile file = new File(nazevSouboru); if (! file.exists()) { ... } if (! file.isReadable()) { ... } try { BufferedReader vstup = new BufferedReader(new FileReader(file)); ...Jinak pro postupne nacitani nepouzivej String ale StringBuilder nebo StringBuffer, bude to rychlejsi (i kdyz tady o to asi tolik nejde).
if (pismeno == 'a') { cetnostA++; if (cetnostA < 10) { pole[0][j] = cetnostA; } else { int pom = cetnostA / 10; int pom2 = cetnostA % 10; pole[0][j] = pom; pole[1][j] = pom2; } }...tohle je nejžhavější kandidát na samostatnou funkci. Jinak nerozumím proč ukládáš zvlášť jednotky a zvlášť desítky, ale jsem psal, moc jsem to nestudoval.
cetnostX
. Pole indexuj číslem, které získáš přetypováním char
na byte
a odečtením 97 (viz. ASCII tabulka). Program se ti zkrátí na pětinu a nezešedivíš, pokud tam budeš chtít udělat nějaké změny/opravy.
int counter[26]; for (int i = 0; i < len; i++) { int asciiVal = (int) vstup.charAt(i); if (asciiVal >=97 && asciiVal <= 122) { int idx = asciiVal - 97; counter[idx] += 1; toPrint[i] = counter[idx]; } }Tisk cetnosti na radky pod sebou bych resil az nakonec, tve reseni s dvojrozmernym polem jednak prenasi prezentacni etail do logiky se kterou vubec nesouvisi, jednak nemuzes vedet zda ta cetnost nebude mit vice cifer nez dve. Tzn. zaznamenej si ty cetnosti jako cisla a az dojde na jejich tisk, tak to teprve res (muzes si behem nacitani napriklad udrzovat maximum ze vsech cetnosti, abys vedel kolik radku je treba na konci vytisknout). Ulohu lze resit bez nacitani souboru do pameti (to bych preferoval), ale malicko se tim zeslozituje to vytisknuti cetnosti pod sebou, protoze neni predem znama delka radku - to ale jde lehce resit treba samozvetsujicim se polem pro citac (tzn. kdyz uz mi pole nestaci, alokuju si nove treba dvakrat vetsi, stare si do nej presunu a jedu dal). Proste kazdy znak co nactes vypises na vystup (+ transformace newline) a nacitas do citace, k nacteni do stringu neni zadny duvod.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.