Matematické Fórum

Nevíte-li si rady s jakýmkoliv matematickým problémem, toto místo je pro vás jako dělané.

Nástěnka
22. 8. 2021 (L) Přecházíme zpět na doménu forum.matweb.cz!
04.11.2016 (Jel.) Čtete, prosím, před vložení dotazu, děkuji!
23.10.2013 (Jel.) Zkuste před zadáním dotazu použít některý z online-nástrojů, konzultovat použití můžete v sekci CAS.

Nejste přihlášen(a). Přihlásit

#1 06. 11. 2009 16:04

Tlustýna
Zelenáč
Příspěvky: 19
Reputace:   
 

Java - počet jednoho znaku v řetězci

Dobrý den

mám udělat algoritmus, který vrátí počet jednoho znaku z řetězce. Napadlo mě toto, ale nechce mi to "sežrat" tu podmínku if. Píše to něco v tom smyslu, že se jedná o neporovnatelné datové typy či co.

static int vratPocetZnaku(String str, String znak){

        Scanner sc = new Scanner(System.in);
        str = sc.next();    //zadej slovo
        znak = sc.next(); // zadej znak
       
        int pocet = 0;
       
        for (int i = 0; i < str.length(); i++)
        {
        if (str.charAt(i) == znak)
        pocet++;
           
        }
    return pocet;
}

Offline

 

#2 06. 11. 2009 16:12

FailED
Příspěvky: 1255
Reputace:   42 
 

Re: Java - počet jednoho znaku v řetězci

Ahoj, Javu sice neznam, ale
Musis porovnavat znak se znakem, promenna znak je retezec, zkus znak.charAt(0) , nebo si deklarovat promennou znak jako character (char)?.

Offline

 

#3 06. 11. 2009 16:20

Tlustýna
Zelenáč
Příspěvky: 19
Reputace:   
 

Re: Java - počet jednoho znaku v řetězci

Po vymazání String znak z deklarace proměnné už to bere podmínku if, ale nelíbí se to pro změnu scanneru.

Offline

 

#4 06. 11. 2009 16:30

FailED
Příspěvky: 1255
Reputace:   42 
 

Re: Java - počet jednoho znaku v řetězci

Na to musis pouzit jinou funkci, funkce sc.next zrejme vraci retezec, muzes zkusit treba System.in.read();

Offline

 

#5 06. 11. 2009 16:38

Lukee
Administrátor
Místo: Opava
Příspěvky: 1853
Škola: UPOL, Informatika
Pozice: Roznašeč reklamních bannerů
Web
 

Re: Java - počet jednoho znaku v řetězci

K čemu je tam tohle?

Code:

Scanner sc = new Scanner(System.in);
str = sc.next();    //zadej slovo
znak = sc.next(); // zadej znak

Já Javu neznám, ale všechny potřebné informace máš v argumentech.

Tu funkci bych přepsal asi takhle:

Code:

static int vratPocetZnaku(String str, Char znak)
{
        int pocet = 0;
       
        for (int i = 0; i < str.length(); i++)
              if (str.charAt(i) == znak)
                    pocet++; 

        return pocet;
}

2+2=4

Offline

 

#6 06. 11. 2009 16:39

FailED
Příspěvky: 1255
Reputace:   42 
 

Re: Java - počet jednoho znaku v řetězci

Vypada to ze je asi lepsi pouzivat ten scanner, do znakove promenne to muzes ulozit takhle:
char aChar = new Scanner(System.in).next().charAt(0);
muzes teda zkusit   znak = sc.next().charAt(0);

Offline

 

#7 06. 11. 2009 16:49

Tlustýna
Zelenáč
Příspěvky: 19
Reputace:   
 

Re: Java - počet jednoho znaku v řetězci

↑ Lukee:
No ↑ FailED:
jo to by šlo :-) díky
teď už to jenom rozchodit

Offline

 

#8 06. 11. 2009 17:09

Lukee
Administrátor
Místo: Opava
Příspěvky: 1853
Škola: UPOL, Informatika
Pozice: Roznašeč reklamních bannerů
Web
 

Re: Java - počet jednoho znaku v řetězci

↑ Tlustýna:
Nechápu, co nesplňuje ta funkce, kterou jsem napsal v ↑ Lukee:? Pokud chápu správně funkci Scanneru, tak to načítá data z konzole -- to je ale určitě špatně. Funkce, která má spočítat počet výskytů jednoho znaku v řetězci nemůže brát řetězec jako parametr a char načítat z konzole...


2+2=4

Offline

 

#9 06. 11. 2009 18:03

Tlustýna
Zelenáč
Příspěvky: 19
Reputace:   
 

Re: Java - počet jednoho znaku v řetězci

↑ Lukee:
No nakonec jsem to upravil následovně, s tím že z konzole načtu nějaký řetězec a spočítá to výskyt už předem zadaného znaku. To by snad mohlo stačit.

public class Main {

static int vratPocetZnaku(char znak){
Scanner sc = new Scanner(System.in);
String str = sc.nextLine();

        int pocet = 0;

        for (int i = 0; i < str.length(); i++)
        {
        if (str.charAt(i) == znak)
        pocet++;
}
    System.out.println ("Zadaný znak se v tomto řetězci nachází " + pocet + "x");
     return pocet;
}
    public static void main(String[] args) {

      vratPocetZnaku('x');

    }

}

Offline

 

#10 06. 11. 2009 18:15

Lukee
Administrátor
Místo: Opava
Příspěvky: 1853
Škola: UPOL, Informatika
Pozice: Roznašeč reklamních bannerů
Web
 

Re: Java - počet jednoho znaku v řetězci

↑ Tlustýna:
To není dobře, protože ta funkce je obecně nepoužitelná. Představ si, že bych teď po tobě chtěl, ať načteš ze souboru nějaký text ve tvaru znak:řetězec a ty bys měl spočítat počet znaků v řetězci. To nemůžeš udělat, protože tvá funkce se bude snažit načítat string bokem, z konzole. Rozumně napsaná funkce bude brát obojí jako parametr. Pokud chceš demonstrovat funkčnost funkce, tak si ten řetězec z konzole načti mimo tu funkci a pak to té funkci předej v parametru. Ta má funkce by měla fungovat, takže když uděláš něco takového...:

Code:

System.out.println ("Zadaný znak se v řetězci nachází " + vratPocetZnaku("retezec", 'e')  + "x");

...tak by ti to mělo vypsat "Zadaný znak se v řetězci nachází 3x".

Samozřejmě nevím jaké máte zadání, možná je tvé řešení dostačující, ale je špatné.


2+2=4

Offline

 

Zápatí

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson