Loading...
dZf1aeA-KlimentHristov avatar dZf1aeA-KlimentHristov 56 Точки

Methods Exercise - Top Number - Моля за обяснение...

Здравейте,

може ли малко разяснение защо джъджа ми гърми, а на проверките  от задачата ми дава точни резултати.

Видях едно решение на колега от тук, но ми беше супер объркано специално за мен с много ифове и много елсове. За мен беше нечетимо малко.

Някаде бъркам в метода си, може ли малко помощ... Какво трябва да добавя в кода си ?

Благодаря предварително!

package com.company;

import java.util.Scanner;

public class TopNumber {
    static void topNumber(int n){
        int saveNum = 0;

        for (int i = 1; i <= n; i++) {
            int j = i;
            if (j % 2 == 0){
                continue;
            }
            while (j > 0) {
                int digit = j % 10;
                saveNum += digit;
                j /= 10;
            }
            if (saveNum == 8 ||saveNum == 16 || saveNum == 88 ) {
                System.out.println(i);
            }
            saveNum =0;
        }
    }
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);

        int n = Integer.parseInt(scan.nextLine());
        topNumber(n);
    }
}

 

 

 

 

Тагове:
0
Programming Fundamentals
MartinBG avatar MartinBG 4803 Точки

Предложеното решение не следва условието на задачата.

Top Number е число, чиито цифри отговарят на следните условия:

  • sum of digits is divisible by 8
  • holds at least one odd digit

Например, 97 е такова число, защото:

  1. 7 (както и 9) е нечетно число
  2.  9 + 7 = 16 % 8 = 0

 

Отделно, topNumber метода прави твърде много неща: обхожда всички числа в даден диапазон, проверява дали са top numbers, принтира на конзолата....

Методите трябва да правят само едно нещо.

 

Ето преработеното решение, като съм се постарал да използвам неща, които сте учили:

package demo;

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class TopNumber {

    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        int range = Integer.parseInt(scan.nextLine());
        List<Integer> topNumbers = findTopNumbersInRange(1, range);
        topNumbers.forEach(System.out::println);
    }

    private static List<Integer> findTopNumbersInRange(int start, int end) {
        List<Integer> topNumbers = new ArrayList<>();
        for (int number = start; number <= end; number++) {
            if (isTopNumber(number)) {
                topNumbers.add(number);
            }
        }
        return topNumbers;
    }

    private static boolean isTopNumber(int number) {
        boolean hasOddDigit = false;
        int digitsSum = 0;
        while (number > 0) {
            int digit = number % 10;
            hasOddDigit |= digit % 2 != 0; // hasOddDigit = hasOddDigit || digit % 2 != 0
            digitsSum += digit;
            number /= 10;
        }
        return hasOddDigit && digitsSum % 8 == 0;
    }
}

 

0
03/05/2020 22:45:29
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.