Podstawy programowania; suma wszystkich liczb z przedziału - optymalizacja kodu

0

Co można by tu zmienić?

package podstawy_programowani;

/*
 ZBIOR ZADAN 7
 Zad 6
 Pobieraj od użytkownika dwie liczby do zmiennych o nazwach a i b typu int tak długo,
 aż suma cyfr wszystkich liczb z przedziału <a, b> nie będzie parzysta, a suma cyfr
 jedności liczb z tego przedziału nie będzie większa od sumy cyfr dziesiątek tych liczb
*/

import java.util.Scanner;

public class Zad4 {

    static void getNumbers() {
        Scanner sc = new Scanner(System.in);
        int a = isDigit(sc.nextLine());
        int b = isDigit(sc.nextLine());
        sc.close();

        int alldigitsSum = allDigitSum(a,b);

        if(!isEven(alldigitsSum) || unitsSum(a,b ) < tensSum(a,b)){
            throw new IllegalArgumentException("Numbers is not correct");
        }
    }

    static int allDigitSum(int a, int b){
        int alldigitsSum = 0;

        for (int i = a; i <= b; i++) {
            alldigitsSum += digitSum(i);
        }
        return alldigitsSum;
    }

    static int unitsSum(int a, int b) {
        int unitsSum = 0;

        for (int i = a; i <= b; i++) {
            unitsSum += i % 10;
        }
        return unitsSum;
    }

    static int tensSum(int a, int b) {
        int tensSum = 0;

        for (int i = a; i <= b; i++) {
            tensSum += (i / 10) % 10;
        }

        return tensSum;
    }

    static int isDigit(String string) {

        if(string == null){
            throw new IllegalArgumentException("string is null");
        }

        if (!string.matches("[0-9]+")) {
            throw new IllegalArgumentException("Number is not correct");
        }
        return Integer.valueOf(string);
    }

    static int digitSum(int number) {
        int digitSum = 0;

        do {
            digitSum += number % 10;
            number = number / 10;
        } while (number > 0);

        return digitSum;
    }

    static boolean isEven(int number) {
        return number % 2 == 0;
    }


    public static void main(String[] args) {
       getNumbers();

    }
}

1

Co można by tu zmienić?

Treść zadania?
Bo teraz nie odpowiada temu co jest w programie.

0

Mam wrażenie, że zgadujesz rozwiązanie.
Popatrz na te zdania to zrozumiesz różnicę:

  1. Przynieś mi dwa pączki to ci powiem czy się najadłem.
  2. Przynoś mi po dwa pączki aż powiem że się najadłem.
1

Pobieraj <skąd> dwie liczby <gdzie zapisać> tak długo, aż <warunek końca>.

0
Delor napisał(a):

Pobieraj <skąd> dwie liczby <gdzie zapisać> tak długo, aż <warunek końca>.

  static void getNumbers() {
        Scanner sc = new Scanner(System.in);
        int alldigitsSum, a, b;

        do {
            System.out.println("podaj zakres");
            a = isDigit(sc.nextLine());
            b = isDigit(sc.nextLine());

            alldigitsSum = allDigitSum(a, b);

        }while (!isEven(alldigitsSum) || unitsSum(a,b ) < tensSum(a,b));
        sc.close();

    }

1 użytkowników online, w tym zalogowanych: 0, gości: 1