С Новым годом! Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/3: Рейтинг темы: голосов - 3, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 18.02.2016
Сообщений: 9
1

почему-то периодически не выходит из цикла

18.02.2016, 17:01. Показов 539. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Программа по созданию случайных чисел. Берет число, возводит его в квадрат, доводит до 8 знаков (если меньше нули дописывает). Из получившегося числа (с учетом нулей) берет средние четыре. Опять возводит в квадрат и дальше по кругу. На определенном этапе числа начинают повторяться, надо чтобы прога считала количество итераций до первого повторения...с некоторыми числами (например 40, 1100) работает норм, а например с 550 или 1250 зависает...метод zero возводит в квадрат и "обрезает" крайние цифры, с ним все нормально. А метод quant уже ищет повторение и считает итерации; в нем очевидно и косяк. Только я его уже 3 часа найти не могу((...

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
28
29
30
31
32
33
34
35
36
37
38
39
40
public class Main {
    public static void main(String[] args) {
        int[] a = {1, 100, 1250};
        for (int i = 0; i < a.length; i++) {
            int ans = 0;
            ans = quant(a[i], ans);
            System.out.print(ans + " ");
        }
    }
 
    public static int quant (int y, int z) {
        ArrayList<Integer> mas = new ArrayList<>();
        mas.add(y);
        for (int i = 1; i <= mas.size(); i++) {
            mas.add(zero(mas.get(i-1)));
            z++;
            int indi = 0;
            for (int j = 0; j < (mas.size() - 1); j++) {
                if (mas.get(i) == mas.get(j)) {
                    indi++;
                    break;
                }
            }
            if (indi == 1)
                break;
        }
        return z;
    }
 
    public static int zero(int x) {
        x = x * x;
        String s = String.valueOf(x);
        while (s.length() < 8)
            s = '0' + s;
        char[] buf = new char[4];
        s.getChars(2, 6, buf, 0);
        s = new String(buf);
        x = Integer.parseInt(s);
        return x;
    }
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
18.02.2016, 17:01
Ответы с готовыми решениями:

Почему не выходит из цикла while?
Задание: С клавиатуры вводятся натуральные числа, пока не будет введено число, делящееся на 5....

Почему прога не выходит из цикла?
#include &lt;stdio.h&gt; int main () {unsigned int s,a,k,n,min,max,kol; min=0; a=0; ...

Не понимаю почему не выходит из цикла
Вот в чём проблема. В другой процедуре я заполняю массив Zak и Zap, и они имеют некоторые значения....

почему выходит из цикла при 100 и не продолжает ?
нужно Вывести в консоль квадраты чисел от 10 до 20. for(var i = 10; i&lt;=20; i++){ i=i*i;...

6
2884 / 2296 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
18.02.2016, 17:14 2
а чт такое ans и почему оно в начале цикла обнуляется?
если обнулять надо то его можно и не передавать каждый раз в quant
0
0 / 0 / 0
Регистрация: 18.02.2016
Сообщений: 9
18.02.2016, 17:31  [ТС] 3
переменная ans - это ответ, количество итераций до первого повторения. Мы его как параметр же вводим в метод quant, его же всяко надо обнулять...

Добавлено через 4 минуты
да, некорректно записал, можно ans не обнулять и в метод как параметр не вводить. Тогда надо z в методе quant задать и обнулить перед for(i)...но программа всеравно корректно не работает...
0
2884 / 2296 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
18.02.2016, 18:26 4
ну я как-то сделал, может непутал слегка, надо проверить
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
28
29
30
public class Main {
    public static void main(String[] args) {
        int[] a = {1, 100, 1250, 40, 1100, 550, 42};
        for (int i = 0; i < a.length; i++) {
            int ans = quant(a[i]);
            System.out.print(ans + " ");
        }
    }
 
    public static int quant(int number) {
        int counter = 0; // не знаю, считать итерации с нуля или с 1
        int last = number;
        for (; ; ) {
            number = zero(number);
            if (last == number) break;
            last = number;
            counter++;
        }
        return counter;
    }
 
    public static int zero(int x) {
        x *= x;
        String s = String.format("%1$-8s", x).replace(" ", "0");
        char[] buf = new char[4];
        s.getChars(2, 6, buf, 0);
        x = Integer.parseInt(new String(buf));
        return x;
    }
}
0
0 / 0 / 0
Регистрация: 18.02.2016
Сообщений: 9
18.02.2016, 18:51  [ТС] 5
у меня с чтением чужого кода еще туговато Многого я не знаю, например не понимаю ваш цикл for с пустыми скобками...но когда я ввожу числа с уже посчитанным количеством итераций, то ответ с вашим результатом не совпадает. Не суть важно что вы подсчет с 0-ля начинаете...для цифр: 1, 4100, 5761 ответ будет: 2, 4, 88. А у вас: 1, 5, 49...
0
2884 / 2296 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
18.02.2016, 19:16 6
я не уверен что для 5761 надо 88 шагов

Добавлено через 10 минут
первый столбик - это число которое передаем в метод zero
второй столбик - это квадрат первого
третий столбик - средние 4 цифры, которые на следующем шаге передаются снова в zero()
Кликните здесь для просмотра всего текста
Bash
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
шаг 0    5761    33189121    1891
шаг 1    1891    35758810    7588
шаг 2    7588    57577744    5777
шаг 3    5777    33373729    3737
шаг 4    3737    13965169    9651
шаг 5    9651    93141801    1418
шаг 6    1418    20107240    1072
шаг 7    1072    11491840    4918
шаг 8    4918    24186724    1867
шаг 9    1867    34856890    8568
шаг 10   8568    73410624    4106
шаг 11   4106    16859236    8592
шаг 12   8592    73822464    8224
шаг 13   8224    67634176    6341
шаг 14   6341    40208281    2082
шаг 15   2082    43347240    3472
шаг 16   3472    12054784    547
шаг 17   547         29920900    9209
шаг 18   9209    84805681    8056
шаг 19   8056    64899136    8991
шаг 20   8991    80838081    8380
шаг 21   8380    70224400    2244
шаг 22   2244    50355360    3553
шаг 23   3553    12623809    6238
шаг 24   6238    38912644    9126
шаг 25   9126    83283876    2838
шаг 26   2838    80542440    5424
шаг 27   5424    29419776    4197
шаг 28   4197    17614809    6148
шаг 29   6148    37797904    7979
шаг 30   7979    63664441    6644
шаг 31   6644    44142736    1427
шаг 32   1427    20363290    3632
шаг 33   3632    13191424    1914
шаг 34   1914    36633960    6339
шаг 35   6339    40182921    1829
шаг 36   1829    33452410    4524
шаг 37   4524    20466576    4665
шаг 38   4665    21762225    7622
шаг 39   7622    58094884    948
шаг 40   948         89870400    8704
шаг 41   8704    75759616    7596
шаг 42   7596    57699216    6992
шаг 43   6992    48888064    8880
шаг 44   8880    78854400    8544
шаг 45   8544    72999936    9999
шаг 46   9999    99980001    9800
шаг 47   9800    96040000    400
шаг 48   400 16000000    0
шаг 49   0   00000000    0

даже если неясно что считать окончанием счета и со скольки начинать считать, все равно никак не 88 шагов

Добавлено через 1 минуту
цикл с пустыми скобами - это просто бесконечный цикл, повторять пока не сработает break;
я могу потом прокомментировать код, но сначала надо понять кто неправильно считает)
0
0 / 0 / 0
Регистрация: 18.02.2016
Сообщений: 9
18.02.2016, 19:52  [ТС] 7
Я его не считал, я его взял отсюда http://www.codeabbey.com/index... erator--ru ...посмотрел вашу таблицу и понял, что вы меня неправильно поняли (условие задачи). Если число меньше 8 цифр, то нули дописываются в начале, а не с конца (как у вас). В моем методе zero так и делалось, а вы его же изменили. Сильно мудрёно для меня его написали, я подумал что там все правильно и не стал вдаваться в подробности. Сделайте добавление нулей в начале и наверно все заработает. Я просто уже спать ложусь и пишу с телефона. Завтра обязательно посмотрю...мне еще дико интересно почему мой вариант работает через раз. Ладно б совсем не работал и значит я херню написал, но ведь считает некоторые числа правильно, а на некоторых зависает((...да, если ваш вариант заработает и вы его откоментируете - буду премного благодарен!!!...все, я спать, вставать через 6 часов уже...
0
18.02.2016, 19:52
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
18.02.2016, 19:52
Помогаю со студенческими работами здесь

Почему запрос выполняется крайне долго и не выходит из цикла?
У меня есть вот такой запрос: ALTER PROCEDURE . AS declare @firstDate date, @lastDate date,...

Периодически выходит из системы
После какого-то времени неиспользования выходит из системы и появляется экран входа. Полез в...

Не выходит из цикла
не понимаю почему при значениях c,t,p,g не выходит из цикла. После ввода значения проверочное...

Не выходит из цикла while
почему при нажатии (-1) не выходит из цикла? #include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Книги и учебные ресурсы по C#
InfoMaster 08.01.2025
Базовые учебники и руководства Одной из лучших книг для начинающих является "C# 10 и . NET 6 для начинающих" Эндрю Троелсена и Филиппа Джепикса . Книга последовательно раскрывает основные концепции. . .
Что такое NullReferenceEx­­­ception и как исправить?
InfoMaster 08.01.2025
NullReferenceException - одно из самых распространенных исключений, с которым сталкиваются разработчики на C#. Это исключение возникает при попытке обратиться к членам объекта (методам, свойствам или. . .
Что такое Null Pointer Exception (NPE) и как это исправить?
InfoMaster 08.01.2025
Null Pointer Exception (NPE) - это одно из самых распространенных исключений в Java, которое возникает при попытке использовать ссылку на объект, значение которой равно null. Это исключение относится. . .
Русский язык в консоли C++
InfoMaster 08.01.2025
При разработке программ на C++ одной из частых проблем, с которой сталкиваются русскоязычные программисты, является корректное отображение кириллицы в консольных приложениях. Эта проблема особенно. . .
Telegram бот на C#
InfoMaster 08.01.2025
Разработка ботов для Telegram стала неотъемлемой частью современной экосистемы мессенджеров. C# предоставляет мощный и удобный инструментарий для создания разнообразных ботов, от простых. . .
Использование GraphQL в Go (Golang)
InfoMaster 08.01.2025
Go (Golang) является одним из наиболее популярных языков программирования, используемых для создания высокопроизводительных серверных приложений. Его архитектурные особенности и встроенные. . .
Что лучше использовать при создании класса в Java: сеттеры или конструктор?
Alexander-7 08.01.2025
Вопрос подробнее: На вопрос: «Когда одновременно создаются конструктор и сеттеры в классе – это нормально?» куратор уточнил: «Ваш класс может вообще не иметь сеттеров, а только конструктор и геттеры. . .
Как работать с GraphQL на TypeScript
InfoMaster 08.01.2025
Введение в GraphQL и TypeScript В современной разработке веб-приложений GraphQL стал мощным инструментом для создания гибких и эффективных API. В сочетании с TypeScript, эта технология. . .
Счётчик на базе сумматоров + регистров и генератора сигналов согласования.
Hrethgir 07.01.2025
Создан с целью проверки скорости асинхронной логики: ранее описанного сумматора и предополагаемых fast регистров. Регистры созданы на базе ранее описанного, предполагаемого fast триггера. То-есть. . .
Как перейти с Options API на Composition API в Vue.js
BasicMan 06.01.2025
Почему переход на Composition API актуален В мире современной веб-разработки фреймворк Vue. js продолжает эволюционировать, предлагая разработчикам все более совершенные инструменты для создания. . .
Архитектура современных процессоров
inter-admin 06.01.2025
Процессор (центральный процессор, ЦП) является основным вычислительным устройством компьютера, которое выполняет обработку данных и управляет работой всех остальных компонентов системы. Архитектура. . .
История создания реляционной модели баз данных, правила Кодда
Programming 06.01.2025
Предпосылки создания реляционной модели В конце 1960-х годов компьютерная индустрия столкнулась с серьезными проблемами в области управления данными. Существовавшие на тот момент модели данных -. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru