Gyakorlati alapok
Számjegyek összeadása
Bevallom őszintén, fogalmam sincs, hogy mi a gyakorlati haszna többjegyű számok számjegyeinek szétbontása, majd összeadásának. Mindenesetre ez volt X. tanítványom egyik házi feladatszerű ujjgyakorlata. Sőt, szorgalmiként az alapkód még az eredmény számjegyeit is összeadja!
Nézzük meg a futtatható Java-alapkódot:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
char fordito;
int eredmeny = 0;
int vegeredmeny = 0;
Scanner szamjegy = new Scanner(System.in);
System.out.println("Kerem adjon meg egy tobbjegyu szamot es
osszeadom a szamjegyeit!");
int bekero = szamjegy.nextInt();
String s = Integer.toString(bekero);
for( int i = 0; i < s.length(); i++) {
fordito = s.charAt(i);
eredmeny =
Character.getNumericValue(fordito);
vegeredmeny += eredmeny;
}
System.out.println(vegeredmeny);
if(vegeredmeny > 9){
char fordito2;
int eredmeny2;
int vegeredmeny2 = 0;
String s2 =
Integer.toString(vegeredmeny);
for( int j = 0; j < s2.length();
j++){
fordito2 =
s2.charAt(j);
eredmeny2 =
Character.getNumericValue(fordito2);
vegeredmeny2
+= eredmeny2;
}
System.out.println(vegeredmeny2);
}
}
}
Végeredmény:
Kerem adjon meg egy tobbjegyu szamot es osszeadom a
szamjegyeit!
5555
20
2
A kód nem optimális, több szempontból.
1.
Az 1. részben alapjában véve felesleges int típusban bekérni a számot, ha az nincs validálva (ellenőrizve) és utána String típusba van konvertálva:
int bekero = szamjegy.nextInt();
Itt jegyzem meg, hogy maga a validálást is célszerűbb String típuson elvégezni.
2.
A 2. részben, a 2. for ciklus előtt több, valójában elkerülhető változódeklarálást tartalmaz. Ezek:
-
char fordito2;
-
int eredmeny2;
-
int vegeredmeny2 = 0;
Sőt, már maga a 2. for ciklus is redundáns tartalom, hiszen a 2 db for ciklus lényegében ugyanazt a műveletet végzi el. Ezt azonban most még nem tudjuk megszüntetni; erre csak a következő, Gyakorlati alapok II. című fejezetcsomagban lesz lehetőségünk.
3.
Emlékezzünk vissza a String adattípussal kapcsolatban, hogy annak mérete létrehozásának pillanatában eldől és többé nem változtatható (inmutable), ezért helyette célszerűbb egy másik, vegeredmeny méretű objektumot létrehoznunk:
String s2 = Integer.toString(vegeredmeny);
Addig is nézzük meg az átdolgozott Java-kódot:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
char fordito;
int eredmeny = 0;
int vegeredmeny = 0;
Scanner szamjegy = new Scanner(System.in);
System.out.println("Kerem adjon meg egy tobbjegyu szamot es
osszeadom a szamjegyeit!");
String s = szamjegy.nextLine();
for(int i = 0; i < s.length(); i++) {
fordito = s.charAt(i);
eredmeny =
Character.getNumericValue(fordito);
vegeredmeny += eredmeny;
}
System.out.println(vegeredmeny);
String s2 = Integer.toString(vegeredmeny);
eredmeny = 0;
vegeredmeny = 0;
for(int j = 0; j < s2.length(); j++){
fordito = s2.charAt(j);
eredmeny =
Character.getNumericValue(fordito);
vegeredmeny += eredmeny;
}
System.out.println(vegeredmeny);
}
}
Végeredmény:
Kerem adjon meg egy tobbjegyu szamot es osszeadom a
szamjegyeit!
5555
20
2