Если вам нужно сгенерировать числа с интервалами, это может быть так:
Integer[] arr = new Integer[((int) (Math.random() * (16 - 30) + 30))];
for (int i = 0; i < arr.length; i++) {
arr[i] = i;
}
Collections.shuffle(Arrays.asList(arr));
System.out.println(Arrays.toString(arr));`
Результат:
[1, 10, 2, 4, 9, 8, 7, 13, 18, 17, 5, 21, 12, 16, 23, 20, 6, 0, 22, 14, 24, 15, 3, 11, 19]
Примечание:
Если вам нужно, чтобы ноль не покидал вас, вы могли бы поставить «if»
Я думаю, что вы не понимаете этот код.
Для всех ключей в dnory_reverse (для всех зашифрованных номеров) вы проверяете, содержит ли enc_str этот ключ и добавляет связанный дешифрованный номер в dec_list.
Заключение: вы забыли о порядке.
Я думаю, вам следует изменить dnory на это:
dnory = {'0': '~`', '1': '~``', '2': '~```', '3': '~````', '4': '~`````', '5': '~``````', '6': '~```````', '7': '~````````', '8': '~`````````', '9': '~``````````'}
и использовать split ('~') для enc_str для получения списка зашифрованные номера.
Я думаю, что я не должен описывать следующие шаги, но помните, что у вас есть «~» в dnory, чего нет в списке, созданном с помощью split ()
Полезные ссылки: - https://www.tutorialspoint.com/python/string_find.htm - https://www.tutorialspoint.com/python/string_split.htm
PS dict () не сортирует ключи в алфавитном порядке, но случайным образом, чтобы ваш код возвращал различные выходные данные.
# this is comment in Python
// not this
Трудно для вашего кодирования различать 0 и 1. Например, как вы представляете 3015?
Однако для 1-9 достаточно кода:
print(''.join(str(len(i)) for i in enc_str.split('~')))
Выход:
1315
Если вы измените свои клавиши на это:
dnory = {'0': '~', '1': '~`', '2': '~``', '3': '~```', '4': '~````', '5': '~`````', '6': '~``````', '7': '~```````', '8': '~````````', '9': '~`````````'}
... есть способ заставить его работать так:
enc_str= "~```~`~`````"
print(''.join(str(len(i)) for i in enc_str.split('~')))
Выход:
0315