Gyakorlati alapok
Különutas betűszámláló teljes bekéréssel
Ebben a rövid fejezetben bekérünk a felhasználótól egy tetszőleges szót, majd egy karaktert és megnézzük, hogy a szóban a karakter hányszor fordul elő. A kódműködtető funkciókat megpróbáljuk a fejezetcsomag alapelveihez mérten egymástól teljesen elkülöníteni, azaz külön, jól átgondolt metódusokba csoportosítani. A main() főprogram -mint eleddig mindig-, most is főmetódusként, egyfajta kontroller szerepet játszik, amely a végső futtatásért felel. Tervezésünk eredménye a következő metódusokban manifesztálódhat (hiszen létezhet másféle megoldás is):
-
a bekérésért felelős scanner objektum osztályszinten és static módosítással lett létrehozva (Alapszinten a static módosítóról című fejezet), tehát a Main osztályban lévő minden rutin látja és használhatja – ezt még nem tanultuk, de akár most azonnal meg is jegyezhetjük,
-
messages() - a metódusok üzeneteit jeleníti meg, kivéve a main() főprogramét,
-
inputString() - bekéri és visszaadja a szót (return),
-
inputCharacter() - bekéri és visszaadja a karaktert,
-
countCharacter() - megszámolja a szóban előforduló karakter számát és visszaadja int típusban,
-
main() - a végső futtatást végzi.
A metódusok elnevezésekor ügyeltünk a releváns konvenciókra (Az adatok, metódusok elnevezésének problémái című fejezet alapján):
-
a változók és metódusok nevei kötelezően kisbetűvel kezdődnek és ha összetettek, akkor úgynevezett camel case formátumot használunk, például inputCharacter(),
-
az osztálynév kötelezően nagybetűvel kezdődik (például Main).
Nézzük meg a futtatható Java-kódot:
import java.util.Scanner;
public class Main {
static Scanner scanner = new Scanner(System.in);
public static void messages(String message) {
System.out.println(message);
}
public static String inputString() {
messages("Kerem, hogy adja meg a szot!");
String inputStr = scanner.nextLine();
return inputStr;
}
public static char inputCharacter() {
messages("Kerem, hogy adja meg a keresett karaktert!");
String inputStr = scanner.nextLine();
char inputChar = inputStr.charAt(0);
return inputChar;
}
public static int countCharacter(String inputStr, char inputChar) {
int number = 0;
for(int i = 0; i < inputStr.length(); i++) {
if(inputStr.charAt(i) == inputChar) {
number++;
}
}
return number;
}
public static void main(String[] args) {
String inputStr = inputString();
char inputChar = inputCharacter();
System.out.println("A keresett szoban (" + inputStr + ") a(z) '"
+ inputChar + "' karakter
elofordulasa: "
+ countCharacter(inputStr, inputChar));
}
}
Végeredmény:
Kerem, hogy adja meg a szot!
abrakadabra
Kerem, hogy adja meg a keresett karaktert!
a
A keresett szoban (abrakadabra) a(z) 'a' karakter elofordulasa: 5