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
Stránky: 1
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
K čemu je tam tohle?
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:
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; }
Offline
↑ 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...
Offline
↑ 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
↑ 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...:
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é.
Offline
Stránky: 1