Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze – Lekce 13 - Textové řetězce v Javě podruhé - Práce s jednotlivými znaky

Zpět

Upozorňujeme, že diskuze pod našimi online kurzy jsou nemoderované a primárně slouží k získávání zpětné vazby pro budoucí vylepšení kurzů. Pro studenty našich rekvalifikačních kurzů nabízíme možnost přímého kontaktu s lektory a studijním referentem pro osobní konzultace a podporu v rámci jejich studia. Toto je exkluzivní služba, která zajišťuje kvalitní a cílenou pomoc v případě jakýchkoli dotazů nebo projektů.

Komentáře
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;
}
 
Odpovědět
26.2.2023 20:47
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.

 
Odpovědět
12.7.2023 13:45
Avatar
Odpovídá 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

 
Odpovědět
12.7.2023 14:45
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

Odpovědět
18.7.2023 17:42
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.

Odpovědět
19.7.2023 17:41
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.");
}
 
Odpovědět
27.7.2023 15:55
Avatar
Odpovídá 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.

 
Odpovědět
27.7.2023 16:22
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ší

 
Odpovědět
27.11.2023 23:32
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 8 zpráv z 108.