Форум программистов, компьютерный форум, киберфорум
Java для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
1 / 1 / 0
Регистрация: 21.04.2018
Сообщений: 41

Вложенный while

10.10.2019, 00:55. Показов 1091. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Задача получить сумму номера телефона, из суммы номера телефона получить новую сумму, если сумма получается одно число вычисления закончены. Написано криво т.к. с циклом не справился и пришлось через пятую точку сделать, но это не вариант.

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
    private static void calculate(String numOfAllDigits) {
        long number = Long.parseLong(numOfAllDigits);
        System.out.println(sumManager(number));
        System.out.println(sumManager(sumManager(number)));
        printPhoneNumberSum(sumManager(sumManager(sumManager(number))));
    }
 
    private static int sumManager(long sum) {
        int result = 0;
        while(sum != 0) {
            result += sum % 10;
            sum /= 10;
            /** пытался тут построить внутри еще один вайл чтоб
             * выводить сумму номера телефона, после чего сумму сложить и получить новую сумму,
             * но зарядка мозга уже закончилась
             */
 
        }
        return result;
    }
 
    static String[] number = new String[] {" ", "one", "two", "three", "four", "5", "6", "7", "8", "9"};
    private static void printPhoneNumberSum(int sum) {
        System.out.println(number[sum]);
    }
Результат выполнения кода с кодом страны

Please enter phone number:
+380662451618
Phone number is correct
50
5
5 -- в данном случае это уже лишнее выполнение кода т.к. конечным результатом должно быть одно число.

результат выполнения без кода страны

Please enter phone number:
0662451618
Phone number is correct
39
12
three
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
10.10.2019, 00:55
Ответы с готовыми решениями:

Вложенный класс
Доброго времени суток! Задача: Создать класс Shop c полями address, type, mark типа Mark. Создать конструктор с параметрами (address,...

Вложенный цикл
Я во вложенных циклах мало шарю,объясните на примере картинки как циклы будут выстраивать её,ну или помогите с кодом,заранее спасибо...

Вложенный цикл While
Прошу помощи, взялся за изучение JAVA! Задача состоит в вычислении целых степеней числа 2 class Power{ public static void main...

10
 Аватар для Мимино
191 / 161 / 35
Регистрация: 22.05.2013
Сообщений: 455
Записей в блоге: 1
10.10.2019, 01:38
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
public class Example {
 
    private static final List<String> numberStrings = List.of("0", "1", "2", "3", "4", "5", "6", "7", "8", "9");
 
    public static void main(String[] args) {
        final String firstPhone = "+380662451618";
        final String secondPhone = "0662451618";
 
        System.out.println(phoneSum(firstPhone));
        System.out.println(phoneSum(secondPhone));
    }
 
    public static int phoneSum(final String phone) {
        
        if (phone.length() == 1 && numberStrings.contains(phone)) {
            return Integer.parseInt(phone);
        }
 
        int result = phone.chars()
                        .mapToObj(obj -> String.valueOf((char) obj))
                        .filter(numberStrings::contains)
                        .mapToInt(Integer::parseInt)
                        .sum();
 
        return phoneSum(String.valueOf(result));
    }
}
1
 Аватар для Aviz__
2759 / 2066 / 509
Регистрация: 17.02.2014
Сообщений: 9,492
10.10.2019, 18:59
более компактно https://www.cyberforum.ru/post13875159.html
1
1 / 1 / 0
Регистрация: 21.04.2018
Сообщений: 41
10.10.2019, 22:18  [ТС]
Друзья спасибо за советы, вопрос решен. данным образом.
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
private static void calculate(String numOfAllDigits) {
        long number = Long.parseLong(numOfAllDigits);
 
        while(number > 10) {
            int sum1 = 0;
            while(number != 0) {
                sum1 += number % 10;
                number /= 10;
            }
            number = sum1;
            if(number > 10) {
                System.out.println(sum1);
            }else {
                printPhoneNumberSum(sum1);
            }
        }
    }
    static String[] number = new String[] {"0", "one", "two", "three", "four", "5", "6", "7", "8", "9"};
    private static void printPhoneNumberSum(int sum) {
        System.out.println(number[sum]);
    }
0
 Аватар для Aviz__
2759 / 2066 / 509
Регистрация: 17.02.2014
Сообщений: 9,492
11.10.2019, 09:22
boobik, а так попробуй, я не запускал, то, что ниже привожу. просто написал тут тебе))
Java
1
2
3
4
5
6
7
8
9
10
11
12
private static void getSumDigitTelephonNum(String telephonNum) {
        int sum = 0;
        for (char charStr : telephonNum.toCharArray()) {
            if (Character.isDigit(charStr))
                sum += charStr - '0';
        }
        if (sum / 10 == 0) {
            printPhoneNumberSum(sum);
            return;
        }
        getSumDigitTelephonNum(String.valueOf(sum));
    }
1
1 / 1 / 0
Регистрация: 21.04.2018
Сообщений: 41
11.10.2019, 16:48  [ТС]
Цитата Сообщение от Aviz__ Посмотреть сообщение
private static void getSumDigitTelephonNum(String telephonNum) {
int sum = 0;
for (char charStr : telephonNum.toCharArray()) {
if (Character.isDigit(charStr))
sum += charStr - '0';
}
if (sum / 10 == 0) {
printPhoneNumberSum(sum);
return;
}
getSumDigitTelephonNum(String.valueOf(su m));
}
Код рабочий и короче моего.
По условию нужно сложить все цифры номера телефона, если получили двухзначное число, то сложить еще раз пока не получим 1 число, вывести результат всех сложений пока не получим одно число.
А так я аж немного затупил т.к. еще не со всеми условными операторами хорошо знаком Плюсик поставил
0
66 / 43 / 24
Регистрация: 18.08.2019
Сообщений: 129
11.10.2019, 20:40
Еще короче

Java
1
2
3
4
5
6
7
8
9
10
11
12
public class CollapseNumber {
    public static void main(String[] args) {
        String number = "+7 (921) 941-92-62";
        collapseNum(number);
    }
 
    private static void collapseNum(String number) {
        int num = number.chars().filter(c -> c >= '0' && c <= '9').map(i -> i - 48).sum();
        System.out.println(num);
        if (num > 9) collapseNum(Integer.toString(num));
    }
}
3
1 / 1 / 0
Регистрация: 21.04.2018
Сообщений: 41
11.10.2019, 23:29  [ТС]
Цитата Сообщение от davson Посмотреть сообщение
public class CollapseNumber {
public static void main(String[] args) {
String number = "+7 (921) 941-92-62";
collapseNum(number);
}
private static void collapseNum(String number) {
int num = number.chars().filter(c -> c >= '0' && c <= '9').map(i -> i - 48).sum();
System.out.println(num);
if (num > 9) collapseNum(Integer.toString(num));
}
}
Мне сказали справится циклами
А int num = number.chars().filter(c -> c >= '0' && c <= '9').map(i -> i - 48).sum(); мы это будем проходить позже

Спасибо за пример только в этом выражении ничегошеньки не понял
0
33 / 25 / 11
Регистрация: 11.10.2019
Сообщений: 162
12.10.2019, 00:01
boobik, например так
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public class App {
 
    public static void main(String[] args) {
        String phoneNumber = "+380662451618";
        System.out.println(getPhoneNumberSum(phoneNumber));
    }
 
    private static int getPhoneNumberSum(String phoneNumber) {
        while (phoneNumber.length() > 1) {
            int sum = 0;
            for (char ch : phoneNumber.toCharArray()) {
                if (Character.isDigit(ch)) {
                    sum += Character.getNumericValue(ch);
                }
            }
            phoneNumber = String.valueOf(sum);
        }
        return Integer.parseInt(phoneNumber);
    }
}
1
66 / 43 / 24
Регистрация: 18.08.2019
Сообщений: 129
12.10.2019, 19:48
Цитата Сообщение от boobik Посмотреть сообщение
ничегошеньки не понял
Code
1
int num = number.chars().filter(c -> c >= '0' && c <= '9').map(i -> i - 48).sum();
number - строка с номером
.chars() - преобразовать в поток int, где каждому символу соответствует числовой код
.filter(c -> c >= '0' && c <= '9') - фильтруем поток, оставляя только символы от '0' до '9'
.map(i -> i - 48) - преобразуем коды числовых символов в сами числа (код '0' равен 48, вычитаем из кода 48 и получаем число 0, и т.д.)
.sum() - суммируем полученный поток
Результат кладем в num.
Далее печатаем полученное число.
И если результат > 9, т.е. дву или более значное число, повторяем процесс.
1
1 / 1 / 0
Регистрация: 21.04.2018
Сообщений: 41
12.10.2019, 22:13  [ТС]
davson, Спасибо за подробное объяснение.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
12.10.2019, 22:13
Помогаю со студенческими работами здесь

Статический вложенный класс
Добрый день. Только начала изучать Java. Пожалуйста, скажите, как синтаксически реализовать следующее: есть класс А, есть класс В...

Вложенный блок try catch
Вроде программа компилируется, но не срабатывают исключения, и не выводятся сразу 2 исключения, первый для массива, второй для чисел...

Анонимный вложенный класс
Добрый день ,прошу меня не пинать. Но мне немного не понятна тема анонимного вложенного класса. Прошу подсказать в одном месте . Если можно...

Не работает вложенный цикл Java!
Добрый день! Будте добры подскажите! Имею следующий код в классе PingPongGameEngine: package engine; import...

Модификатор private и вложенный класс
public class Main { public static void main(String args) { } private void meth(){ Test test = new Test(); ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru