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:

 

www.informatika-programozas.hu - Futtatható Java-kód!

 

 

 

 

 

 

 

 

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:

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:

 

www.informatika-programozas.hu - Futtatható Java-kód!

 

 

 

 

 

 

 

 

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