@SankaSanka

Как оптимально перебрать все возможные комбинации 4х массивов?

Пытаюсь написать небольшую программку на Java которая сгенерирует абсолютно все возможные варианты IP адресов.
от 0.0.0.0 до 255.255.255.255 на реальность проверять не надо. просто перебрать числа.
сохранять будет в файлы

пыталась с помощью циклов for но получается какое-то дикое спагетти с неконтролируемым результатом.

Подскажите пожалуйста, какой самый аккуратный способ это сделать? Может есть какие-то библиотеки для таких случаев?
  • Вопрос задан
  • 124 просмотра
Решения вопроса 3
BorLaze
@BorLaze
Java developer
Хм...а чем не устраивает простой цикл с 4 уровнями, если нужны "абсолютно все возможные варианты IP адресов"? Заодно и адреса по порядку идти будут...
for(int i0=0; i<=255; i++) {
    for(int i1=0; i<=255; i++) {
        for(int i2=0; i<=255; i++) {
            for(int i3=0; i<=255; i++) {
                writeToFile(printf("%d.%d.%d.%d\n", i0, i1, i2, i3));
            }
        }
    }
}
Ответ написан
Комментировать
azerphoenix
@azerphoenix Куратор тега Java
Java Software Engineer
Добрый день.
Не знаю, будет ли это полезно вам, но библиотека действительно есть (Apache Commons Math):
CombinatoricsUtils.combinationsIterator()
https://commons.apache.org/proper/commons-math/jav...
Ответ написан
Комментировать
@User700
Сделайте 4 вложенных цикла от 0 до 255 (256). Или один цикл от 0 вкл. до 256*256*256*256 невкл., а значения четырёх байтов находите как остатки / частные от деления (трехкратного) на 256.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@rPman
ip4 адрес это число 32бит, все ip адреса тут это все значения unsigned int32 от 0 до 0xFFFFFFFF
т.е. пишешь один единственный цикл от 0 до 0xFFFFFFFF а затем из числа получаешь ip в нужном тебе виде, либо последовательным получением остатка отделения на 256, либо вручную побитовыми операциями (маска и сдвиг) либо сконвертировав число в массив байт
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы