Mikuláš je tu! Získaj 90 % extra kreditov ZADARMO s promo kódom CERTIK90 pri nákupe od 1 199 kreditov. Len do nedele 7. 12. 2025! Zisti viac:
NOVINKA: Najžiadanejšie rekvalifikačné kurzy teraz s 50% zľavou + kurz AI ZADARMO. Nečakaj, táto ponuka dlho nevydrží! Zisti viac:

Diskusia – 14. diel - Textové reťazce v Jave - Práca s jednotlivými znakmi

Späť

Upozorňujeme, že diskusie pod našimi online kurzami sú nemoderované a primárne slúžia na získavanie spätnej väzby pre budúce vylepšenie kurzov. Pre študentov našich rekvalifikačných kurzov ponúkame možnosť priameho kontaktu s lektormi a študijným referentom pre osobné konzultácie a podporu v rámci ich štúdia. Toto je exkluzívna služba, ktorá zaisťuje kvalitnú a cielenú pomoc v prípade akýchkoľvek otázok alebo projektov.

Komentáre
Posledné komentáre sú na spodnej časti poslednej stránky.
Avatar
Pavel Vaněk
Člen
Avatar
Pavel Vaněk:26.2.2023 20:47

Je nutné dělat koverzi z char na int a zpátky? Zdá se, že by fungovalo ten posun přičíst přímo charu a výsledek je stejný?

for (char znak : puvodniText.toCharArray()) {
    //int i = (int)znak;
    //i += 1;
    //znak = (char)i;
    znak += 1;
    sifrovanyText += znak;
}
Avatar
Marek Jiříček:12.7.2023 13:45

Když u Scanneru použiju charset "Windows-1250", tak nebere správně znaky s českou diakritikou:
áéí
áéĂ

Když použiju jako charset UTF-8, tak je to v pohodě:
Scanner scanner = new Scanner(System.in, StandardCharset­s.UTF8);

Je tohle běžné chování, nebo je problém v tom že můj Windows 10 je v angličtině a IntelliJ je nainstalovaný v angličtině, nebo podobně? Vím že charste "Windows-1250" znamená něco jako "windows eastern european" ...
Chci vědět, jestli je něco špatně na mojí straně, nebo jste zapoměli tohle uvést aby scanner bral diakritiku.

Avatar
Odpovedá na Marek Jiříček
Marek Jiříček:12.7.2023 14:45

Tak můj Windows i IntelliJ mají nastaveno default windows-1250.

Vážně netušim co je špatně ...

Ale na wiki píšeou že windows-1250 už se nahrazuje UTF-8 ... "It is primarily used by Czech,[1] though Czech has now moved to UTF-8[2] and mostly abandoned this legacy encoding." https://en.wikipedia.org/…Windows-1250

Avatar
Martin Marek
Člen
Avatar
Martin Marek:18.7.2023 17:42

článek je dobrý, jen by chtělo dovysvětlit (int)znak. proč je int v () . já to pochopil tak , že (int)znak je char znak. proč je to v () nechápu. Pro laiky by zde chtělo něco dopsat na dovysvětlenou

Odpovedať
Slušnost a ochota jsou nejdůležitější lidské vlastnosti
Avatar
Martin Marek
Člen
Avatar
Martin Marek:19.7.2023 17:41

a také v ASCII hodnota je ve výpisu použito %c . v článku o tom není ani slovo, takže si to musíme dohledat a zjistit, že je to - format specifier. Když už to použiji, tak aspoň napíšu, co to znamená nebo proč to použiju.

Odpovedať
Slušnost a ochota jsou nejdůležitější lidské vlastnosti
Avatar
Lucie Zejdová:27.7.2023 15:55

Caesarova šifra rozšířená o cykly - pokračování, volba posunu, robustnější vzhledem k odpovědím uživatele a učící se nová vyjádření souhlasu. To poslední dodal na zakázku ChatGPT, už nemám mentální ani časovou kapacitu. Na to, že mě práce s řetězci šla na nervy ... Děti mají šifry rády, testovaly a přimělo mě to k vylepšení. Jo, motivace je všechno. Mám radost. (A potřebuju ji, začínám od nuly a jde to teda ztuha.)

        public static void main(String[] args) {
        // Caesarova šifra
        Scanner sc = new Scanner(System.in, "Windows-1250");
        System.out.println("Caesarova šifra".toUpperCase());
                System.out.println();

        // deklarování proměnných
        String pokracovat = "ano";
        String[] souhlas = {"ano", "jistě", "jo", "proč ne", "možná"};
        int posun = 1;

        // zahájení obou soustředných cyklů
    while (pokracovat.equals("ano")) {
        while (pokracovat.equals("ano")) {
        System.out.println("Zadej prosím text ke kódování:");
        String puvodniZprava = sc.nextLine();
        String zasifrovanaZprava = "";

        // vlastní šifrování
        for (char znak : puvodniZprava.toCharArray()) {  // procházení cyklu
        int ascii = (int)znak; // převod na čísla a nové znaky
        ascii += posun;
        char novyZnak = (char)ascii;
        zasifrovanaZprava = zasifrovanaZprava + novyZnak;
                }

        System.out.printf("%s%n", zasifrovanaZprava.toUpperCase());
                     System.out.println();

        // podmínka vnitřního cyklu
        System.out.println("Chceš pokračovat?");
        pokracovat = sc.nextLine().trim().toLowerCase();
                System.out.println();
        for (String vyjadreniSouhlasu : souhlas)
            if (pokracovat.contains(vyjadreniSouhlasu)){
            pokracovat = "ano";
                }

        // Learn new expressions - courtesy ChatGPT
        System.out.println("Omlouvám se, nerozumím ještě vždycky.");
        System.out.println("Je toto vyjádření souhlasu? ano/ne");
        String learnAgreement = sc.nextLine().trim().toLowerCase();
        System.out.println("Díky za upřesnění.");
        System.out.println();
                if (learnAgreement.contains("ano")) {
                        String[] newSouhlas = new String[souhlas.length + 1];
                        System.arraycopy(souhlas, 0, newSouhlas, 0, souhlas.length);
                        newSouhlas[souhlas.length] = pokracovat;
                        souhlas = newSouhlas;
                }
        }

        // podmínka rámujícího cyklu
       System.out.println("Chceš třeba ještě zadat jiné číslo ke kódování šifry? ano/ ne");
       pokracovat = sc.nextLine().trim().toLowerCase();
                System.out.println();
        for (String vyjadreniSouhlasu : souhlas)
            if (pokracovat.contains(vyjadreniSouhlasu)){
                pokracovat = "ano";

       System.out.println("Zadej, o kolik šifra posune písmena:");
       posun = Integer.parseInt(sc.nextLine().trim());
                System.out.println();
            }
    }

        // Konec
        System.out.println("Bavilo mě s tebou šifrovat. Měj se fajn.");
}
Avatar
Odpovedá na Lucie Zejdová
Lucie Zejdová:27.7.2023 16:22

Edit: .. práce MNĚ šla na nervy ... 🤦

A ten učící se cyklus tak úplně nešlape, minimálně potřebuje "pokracovat = "ano"". Jdu ven.

Avatar
Michaela Urbánková:27.11.2023 23:32

čím dále v lekcích jsem, tím více se mi vše plete a je pro mě náročnější to pochopit. Snad to bude časem lepší

Avatar
Petr Hrubý
Člen
Avatar
Petr Hrubý:14.5.2024 11:38

Ahoj jen jsem chtěl doplnit k té Césarově šifře (a nevim jestli se tady neopakuji)

pokud zadam do kodu Scanner sc = new Scanne (System.in);

aby mohli uživatele zadat svoji puvodní zprávu tak je třeba počítat s tím že Velký písmena mají jíné hodnoty a proto slovo "Zebra" nebude zakodovano stejně jako slovo "zebra"

Asi by to bylo dobré zminit nebo upravit do kodu příkazem:
puvodniZprava= puvodniZprava­.toLowerCase();

Ale jinak díky, skvělá práce :)

Avatar
Lucie Hrdličková:21.5.2024 21:06

System.out.prin­tln(jazyk.cha­rAt(3));
Pro mě jak ozačátečníka byla tato lekce absolutně nepochopená.

Posledné komentáre sú na spodnej časti poslednej stránky.
Robíme čo je v našich silách, aby bola tunajšia diskusia čo najkvalitnejšia. Preto do nej tiež môžu prispievať len registrovaní členovia. Pre zapojenie sa do diskusie sa zaloguj. Ak ešte nemáš účet, zaregistruj sa, je to zadarmo.

Zobrazené 10 správy z 115.