NOVINKA: Staň se datovým analytikem od 0 Kč a získej jistotu práce, lepší plat a nové kariérní možnosti. Více informací:

Diskuze – Lekce 15 - Textové řetězce v Javě do třetice - Split a join

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
Michal
Člen
Avatar
Michal:4.9.2020 22:10

Ahoj, tak třetí pokus :)

package lekce_9_priklad_2;

import java.util.Scanner;
import java.util.Arrays;

public class Lekce_9_priklad_2 {

    public static void main(String[] args) {
        // řetězec, který chceme zakódovat
        Scanner sc = new Scanner(System.in, "Windows-1250");
        System.out.println("Zadej text k zakódování: ");
        String zadani = sc.nextLine().toLowerCase();

        //řetězec se zakódovanou zprávou
        String zprava = "";

        // vzorová pole
        String abeceda = "abcdefghijklmnopqrstuvwxyz";
        String[] morseovka = {".-", "-...", "-.-.", "-..", ".", "..-.", "--.", "....",
        "..", ".---", "-.-", ".-..", "--", "-.", "---", ".--.", "--.-", ".-.", "...", "-", "..-",
        "...-", ".--", "-..-", "-.--", "--.."};

        // iterace jednotlivými znaky zprávy
        for (char c : zadani.toCharArray() ){
            int index = -1;
            for (int i=0; i<abeceda.length(); i++){
                if ((String.valueOf(c)).equals(abeceda.charAt(i))){
                index = i;
                }
            }
                if (index >= 0){
                    zprava = zprava + morseovka[index] + " ";
                }
                else {
                    String znak = "?";
                    zprava = zprava + znak + " ";
                }
        }
        System.out.printf("Zakódovaná zpráva je: %s\n", zprava);
    }

    }
 
Odpovědět
4.9.2020 22:10
Avatar
Alesh
Tvůrce
Avatar
Alesh:4.9.2020 23:16

Problém je v této podmínce:

if ((String.valueOf(c)).equals(abeceda.charAt(i)))

Dej tam místo ní toto:

if (c == abeceda.charAt(i))

Jinak teda celkově máš ten kód takovej, no... zbytečně komplikovanej, zkus ho trochu "učesat". ;-)

 
Odpovědět
4.9.2020 23:16
Avatar
Robert Vyskup:30.7.2021 18:03

Může mi někdo vysvětlit, v čem je teda nakonec praktický rozdíl mezi stringem a polem. Díky

 
Odpovědět
30.7.2021 18:03
Avatar
Alesh
Tvůrce
Avatar
Odpovídá na Robert Vyskup
Alesh:30.7.2021 19:10

Tak si najdi, jak se deklaruje pole a zkus si do něj uložit nějaký text pěkně znak po znaku. A pak ten (takto uložený řetězec) zkus třeba jen vypsat.

 
Odpovědět
30.7.2021 19:10
Avatar
Odpovídá na Alesh
Robert Vyskup:30.7.2021 20:26

Jojo chápu. To by bylo moc zdlouhavé a pracné. Čili jestli jsem to pochopil úplně správně. Pole použijeme především jen tam kde bude uživatel vkládat různá čísla a program pak s nimi bude pracovat.

 
Odpovědět
30.7.2021 20:26
Avatar
Alesh
Tvůrce
Avatar
Odpovídá na Robert Vyskup
Alesh:30.7.2021 21:01

No, možná by bylo dobré to říct ještě trochu jinak. Prostě String je jedna z druhů proměnných, která má některé vlastnosti pole (jednotlivé znaky mají své indexy) a taky ji lze snadno převést přímo na pole znaků (metoda toCharArray).

 
Odpovědět
30.7.2021 21:01
Avatar
Robert Vyskup:31.7.2021 4:44

Tak nevím kde tam mám chybu:

public static void main(String[] args) {
        String s = "leonardo";
        System.out.printf("Původní zpráva: %s\n", s);
        String zprava = "";
        String abeceda = "abcdefghijklmnopqrstuvwxyz";
        String[] morseovka = {".-", "-...", "-.-.", "-..", ".", "..-.", "--.", "....",
        "..", ".---", "-.-", ".-..", "--", "-.", "---", ".--.", "--.-", ".-.", "...", "-", "..-",
        "...-", ".--", "-..-", "-.--", "--.."};
        for (char abcZnak : s.toCharArray()) { //vybere znaky ze stringu s
            int index = (int) abcZnak; //převod znaku na číselný index
            for (int i = 0; i < morseovka.length; i++) //projede morseovku a přiřadí k jednotlivým polím i
            if (morseovka[i].equals(index)) {
            zprava += morseovka[i];  // převede shodné znaky do zprávy
            }
        }
        System.out.printf("Zakódovaná zpráva je: %s", zprava);
 
Odpovědět
31.7.2021 4:44
Avatar
Atrament
Člen
Avatar
Atrament:31.7.2021 11:30

Chybu máš především v tom převodu znaku na číselný index, to co tam děláš je přetypování proměnné typu char na proměnnou typu int, a to nechceš. Co potřebuješ udělat je zjistit na jaké pozici se ten znak nachází ve stringu abeceda (metoda indexOf())

Pak když máš ten index tak neprocházej pole morseovka cyklem, ale prostě si vytáhni ten správný znak pomocí morseovka[index] a připoj na konec zprava.

 
Odpovědět
31.7.2021 11:30
Avatar
Robert Vyskup:31.7.2021 18:10

Tak už vím, že se to mělo psát úplně jinak, ale byla to dost velká zrada, protože o indexOf jsme si ještě vůbec neříkali :-?

 
Odpovědět
31.7.2021 18:10
Avatar
Atrament
Člen
Avatar
Odpovídá na Robert Vyskup
Atrament:31.7.2021 18:39

Na začátku této lekce je návod jak si prolistovat všechny metody které třída String nabízí, především proto, že je je jich hodně a rozepisovat se tu o všech by bylo zdlouhavé. Kromě toho je metoda indexOf() zmíněna i dále v textu.

Ale asi máš pravdu asi by bylo lepší zrovna tuhle metodu někde popsat přímo, někam ji vměstnám...

 
Odpovědět
31.7.2021 18:39
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 10 zpráv z 127.