С Новым годом! Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
27 / 19 / 8
Регистрация: 08.06.2015
Сообщений: 491

Недопустимое выражение при делении по модулю

22.02.2019, 18:52. Показов 2423. Ответов 18
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте,
хочу вернуть булево значение, если при (a%11)==0, но компилятор сопротивляется. Говорит, мол, "unreachable statement".
Подскажите, пожалуйста.

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
static boolean pruefen(StringBuffer isbn) throws IllegalArgumentException
{
int a = 0;
for(int i=0, j=10; i<isbn.length(); i++, j--)
{
if(isbn.charAt(i)== '-')
{
isbn.deleteCharAt(i);
continue;
}
else if(isbn.charAt(i) == 'X')
{
a+= 10*j;
continue;
}
a+= (int)isbn.charAt(i)*j;
}
throw new IllegalArgumentException();
int b = a%11;
if (b==0) {return true;}
else {return false;}
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
22.02.2019, 18:52
Ответы с готовыми решениями:

Вложенный цикл. Найти трехзначные числа, которые при делении на 2 дают остаток 1, при делении на 3 остаток 2, при делении на 4 остаток 3
НАЙТИ С ПОМОЩЬЮ ВЛОЖЕННОГО ЦИКЛА))) найти асе трехзначные числа, которые при делении на 2 дают остаток 1,при делении на 3 остаток 2, при...

Поиск четырехзначных чисел, которые при делении на 133 дают в остатке 125, а при делении на 134 - 111
2.Составить программу поиска четырехзначных чисел которые при делении на 133 дают в остатке 125.а при делении на 134 дают в остатке 111

Определить произведение элементов, которые при делении на 2 дают такой же остаток как и при делении на 3.
1 задача Ввести двумерный массив A 3×4 . Определить произведение элементов, которые при делении на 2 дают такой же остаток как и при...

18
 Аватар для Aviz__
2736 / 2046 / 506
Регистрация: 17.02.2014
Сообщений: 9,462
22.02.2019, 18:58
так и возвращай return (a%11)==0; вместо строк 19-22
throw new IllegalArgumentException(); к чему у тебя?
0
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
22.02.2019, 18:59
Лучший ответ Сообщение было отмечено Сергей Кос как решение

Решение

Сергей Кос, у тебя переменная 'a' проинициализирована нулем, дальнейшие с ней действия происходят в if, т.е. может ничего и не произойти. Вот компилятор и ругается на возможность 0%11
1
27 / 19 / 8
Регистрация: 08.06.2015
Сообщений: 491
22.02.2019, 19:01  [ТС]
Цитата Сообщение от Aviz__ Посмотреть сообщение
так и возвращай return (a%11)==0; вместо строк 19-22
Тоже самое, я просто для уверенности разделил на условия.

Добавлено через 1 минуту
Цитата Сообщение от iSmokeJC Посмотреть сообщение
Сергей Кос, у тебя переменная 'a' проинициализирована нулем, дальнейшие с ней действия происходят в try, т.е. может ничего и не произойти. Вот компилятор и ругается на возможность 0%11
Спасибо! я с исключениями еще пока эксперементирую. Буду знать)
0
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
22.02.2019, 19:10
Сергей Кос, кстати, не в этом дело.
А дело в том, что перед int b = a%11; ты выбрасываешь исключение.

Добавлено через 4 минуты
Напиши-ка словами, что ты хочешь сделать
1
27 / 19 / 8
Регистрация: 08.06.2015
Сообщений: 491
22.02.2019, 19:24  [ТС]
Цитата Сообщение от iSmokeJC Посмотреть сообщение
А дело в том, что перед int b = a%11; ты выбрасываешь исключение.
Без исключений, действительно, все работает. А с throw никто дружить не хочет, перед кем бы я его не поставил, все превращается в unreachable

Добавлено через 3 минуты
По условию задачи,
индивидуальные книжные номера ISBN для какой-то там расшифровки умножаются поочередно на 10, 9, 8, 7 и т.д.
Если вся эта сумма делится на 11 без остатка, то книжный номер считается годным. Если встречается тире, то он исключается из рассчета, а если Х, то это десятка.
Также по условию я должен вплести сюда исключение. А оно у меня не вплетается
0
 Аватар для ArtemFM
746 / 493 / 285
Регистрация: 10.09.2015
Сообщений: 1,530
22.02.2019, 19:33
Добавлено через 2 минуты
если ты не работаешь с многопоточностью, то используй StringBuilder (StringBuilder и StringBuffer идентичны по методам, но StringBuffer имеет синхронизированные методы что замедляет его работу в отличии от sb. Ну если ты работаешь с многопоточностью, то выбор правильный)

зачем ты вообще выбрасываешь исключение? какой в нём толк? разъясни свою задумку

Добавлено через 1 минуту
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
static boolean checkFunction(StringBuilder sb) {
        int a = 0;
        for (int i = 0, j = 10; i < sb.length(); i++, j--) {
            if (sb.charAt(i) == '-') {
                sb.deleteCharAt(i);
                continue;
            } else if (sb.charAt(i) == 'X') {
                a += 10 * j;
                continue;
            }
            a += sb.charAt(i) * j;
        }
        return a % 11 == 0;
    }
1
27 / 19 / 8
Регистрация: 08.06.2015
Сообщений: 491
22.02.2019, 19:37  [ТС]
ArtemFM,
да, вот без исключения работает. Университетская задача, нужно прикрутить сюда IllegalArgumentException. Зачем, я тоже не в курсе. По мне, так главное, чтобы работало))

Добавлено через 3 минуты
Вот: "StringBuffer объект должен содержать ровно 10 цифр, в противном случае, выбросьте исключение IllegalArgumentException"
0
 Аватар для ArtemFM
746 / 493 / 285
Регистрация: 10.09.2015
Сообщений: 1,530
22.02.2019, 19:51
Лучший ответ Сообщение было отмечено Сергей Кос как решение

Решение

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
static boolean checkFunction(StringBuilder sb) throws IllegalAccessException {
        if (sb == null || sb.length() == 0) {
            throw new IllegalAccessException("Error input data");
        }
        int a = 0;
        for (int i = 0, j = 10; i < sb.length(); i++, j--) {
            if (sb.charAt(i) == '-') {
                sb.deleteCharAt(i);
                continue;
            } else if (sb.charAt(i) == 'X') {
                a += 10 * j;
                continue;
            }
            a += sb.charAt(i) * j;
        }
        return a % 11 == 0;
    }
Добавлено через 2 минуты
Java
1
2
3
if (sb == null || (sb.length() != 10 && sb.toString().replaceAll("\\d+", "").length() != 0)) {
            throw new IllegalArgumentException("Error input data");
        }
Добавлено через 4 минуты
в условии ошибся... Вот правильный вариант:

Java
1
2
3
if (sb == null || sb.length() != 10 || sb.toString().replaceAll("\\d+", "").length() != 0) {
            throw new IllegalArgumentException("Error input data");
        }
Добавлено через 2 минуты
вот итоговый твой код:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public static boolean checkFunction(StringBuffer sb) throws IllegalArgumentException {
        if (sb == null || sb.length() != 10 || sb.toString().replaceAll("\\d+", "").length() != 0) {
            throw new IllegalArgumentException("Error input data");
        }
        int a = 0;
        for (int i = 0, j = 10; i < sb.length(); i++, j--) {
            if (sb.charAt(i) == '-') {
                sb.deleteCharAt(i);
                continue;
            } else if (sb.charAt(i) == 'X') {
                a += 10 * j;
                continue;
            }
            a += sb.charAt(i) * j;
        }
        return a % 11 == 0;
    }
Добавлено через 1 минуту
для теста я посылал такие значения:

Java
1
2
3
4
5
StringBuffer sb = new StringBuffer("1234567890");
        StringBuffer sb2 = new StringBuffer("1234a67890");
        StringBuffer sb3 = new StringBuffer("1234567");
        StringBuffer sb4 = new StringBuffer("abcdesdfsd");
        StringBuffer sb5 = null;
1
27 / 19 / 8
Регистрация: 08.06.2015
Сообщений: 491
22.02.2019, 19:57  [ТС]
ArtemFM,
Благодарю) а я всё по учебнику пытаюсь этот throw без условия впихнуть, теперь вижу, как это работает)) Супер!
0
 Аватар для ArtemFM
746 / 493 / 285
Регистрация: 10.09.2015
Сообщений: 1,530
22.02.2019, 19:57
погоди, sb должен содержать 10цифр...

а он может содержать ещё что-то? потому что если он заведомо может содержать лишь цифры, то зачем вот это?:
sb.charAt(i) == 'X'
0
27 / 19 / 8
Регистрация: 08.06.2015
Сообщений: 491
22.02.2019, 20:08  [ТС]
ArtemFM,
последний знак может принимать значения от 0 до 10, и десятку отмечают Х, я ее просто обратно с римских на арабские перевожу.
Кроме цифр могут быть тире. Но тут я просто добавлю, чтобы прошел еще один цикл проверки на количество цифр: не важно сколько тире, главное, чтобы число цифр было 10. Или думаю, так как j должно быть не больше и не меньше 10, то лучше мне тут построить условие для выбрасывания исключения. Тогда сколько бы ни было тире, они все равно удалятся, а вот j останется ровно столько, чтобы подсчитать контрольное значение (которое делится на 11). Но это уже детали) Самое главное, вы показали, куда смотреть) а я на return грешил))
0
 Аватар для ArtemFM
746 / 493 / 285
Регистрация: 10.09.2015
Сообщений: 1,530
22.02.2019, 20:14
так проще сказав, тебе нужно из строки 1-2-3-4-5-6-X получить только цифры и посмотреть, делится ли число это на 11?
0
27 / 19 / 8
Регистрация: 08.06.2015
Сообщений: 491
22.02.2019, 20:20  [ТС]
ArtemFM,
а... ну да)))) верно!
0
 Аватар для ArtemFM
746 / 493 / 285
Регистрация: 10.09.2015
Сообщений: 1,530
22.02.2019, 20:41
Ох, тогда вот что не понятно:

У тебя метод возвращает true, если строка имеет 10 цифр в противном случае false. При том с учётом, что X (10) там должен присутствовать обязательно и 1 раз, иначе будет не 11 итоговый цифр а больше или меньше...э

К чему это я... Зачем выбрасывать исключение, если ты и так методом проверяешь корректность строки???

IllegalArgumentException - это исключение выбрасывают, если входящий аргумент не соответствует требованиям. А тут у тебя сам метод проверяет и возвращает результат в boolean`е. Смысла нет в исключении

тут либо метод void должен быть и ничего не возвращать, апри некорректных данных он просто выкинет исключение, либо можно только проверить на null, а уже метод проверяет корректность

Добавлено через 10 минут
типа такого:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public static void checkFunction(StringBuffer sb) {
        if (sb != null) {
            //первый replace заменяет все - на ""
            //второй заменяет X на 10
            String result = sb.toString().replaceAll("-", "").
                    replaceAll("X", "10");
            //если длинна полученной строки не равна длинне, после попытки удалить из неё
            //всё, кроме цифр (это значит там были не только цифры) и длинна не равна 11 символов
            //то заходим в условие и выкидываем исключение
            if (result.length() != result.replaceAll("\\D+", "").length() && result.length() != 11) {
                throw new IllegalArgumentException();
            }
        } else {
            //сюда попадём, если входной параметр был равен null
            throw new IllegalArgumentException();
        }
    }
0
27 / 19 / 8
Регистрация: 08.06.2015
Сообщений: 491
22.02.2019, 20:48  [ТС]
ArtemFM,


Задачу не я составлял, может быть имеется в виду, что при вводе данных будет значение, в котором нет десяти цифр в строке(----5---2--Х)или, наоборот, слишком много цифр (558484115136548).
А истину/ложь мне нужно получить, только если чтобы знать, есть ли остаток или нет остатка при делении всей этой суммы на 11.
(1 знак умножается на 10, второй - тире удаляется, третий знак - на 9, четвертый знак - на 8 и т.д.) Все это суммируется и делится на 11.
0
 Аватар для ArtemFM
746 / 493 / 285
Регистрация: 10.09.2015
Сообщений: 1,530
22.02.2019, 20:52
суть понял... Тогда смысл в исключении есть ) Дерзай и удачи с задачей
1
27 / 19 / 8
Регистрация: 08.06.2015
Сообщений: 491
22.02.2019, 20:55  [ТС]
ArtemFM,

вы правы. Моя ошибка. Перечитал задание (проблема в том, что она на немецком), я пошел по неправильному пути. Мне нужно было сначала удалить все тире в строке. Затем посчитать всю эту сумму и поделить на 11. А исключение мне нужно использовать только если в строке после удаления тире будет что-то кроме цифры или Х. Тогда должно выбрасываться IllegalArgumentException. Я все перепутал, прошу прощения. Но так даже легче: начинаю с цикла, нахожу тире, удаляю. Включаю условие, что, если в строке есть что-то, что != '-' || != X || != 0 || !=1 || !=2 и т.д. и тогда выбрасываю исключение
А в остальном также циклом умножаю и суммирую.
0
 Аватар для ArtemFM
746 / 493 / 285
Регистрация: 10.09.2015
Сообщений: 1,530
22.02.2019, 21:08
только, коли - уже удалены, их в условие можно не включать. А так да, задача норм для понимания )
Если что, обращайся с помощью...поможем )
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
22.02.2019, 21:08
Помогаю со студенческими работами здесь

Составить программу поиска трехзначных чисел, которые при делении на 47 дают в остатке 43, а при делении на 43
Составить программу поиска трехзначных чисел, которые при делении на 47 дают в остатке 43, а при делении на 43 дают в остатке 47.

Определить произведение элементов, которые при делении на 2 дают такой же остаток как и при делении на 3
Ввести двумерный массив А3×4 . Определить произведение элемен-тов, которые при делении на 2 дают такой же остаток как и при делении на 3.

Составить программу поиска трёхзначный чисел, которые при делении на 47 дают в остатке 43, а при делении на 4
Составить программу поиска трёхзначный чисел, которые при делении на 47 дают в остатке 43, а при делении на 43 дают в остатке 47.

Недопустимое выражение на сайте
пришло письмо от хостинга, от том что нельзя использовать http:// в url адресе Пример недопустимого выражения с вашего сайта: &lt;img...

Найти все числа, которые при делении на a дают остаток b, а при делении на b дают в остатке a
Ввести два натуральных числа a и b, на промежутке от 1 до N найти все числа, которые при делении на a дают остаток b, а при делении на b...


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

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Новые блоги и статьи
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru