2015-10-13 3 views
0

Помогите решить эту проблему. Я хочу проверить IP-адреса в определенном диапазоне с помощью командной строки.IP-адрес в диапазоне

Например я запускаю программу в ЦМД «ява IPAddressCheck 1.1.1.1 5» и вывод должен быть:

1.1.1.1 
1.1.1.2 
1.1.1.3 
1.1.1.4 
1.1.1.5 

это мой код, и проблема пошла я запускаю код будет рассчитывать начать с «1.1.1.2» до «1.1.1.6».

import java.util.*; 
import java.net.*; 


public class IPAddressCheck 
{ 
public static void main(String[] args) throws Exception 
{ 
     String startIp = args[0]; 
     int number = 0; 

     if (args.length != 1) 
     { 
      try 
      { 
       number = Integer.parseInt(args[1]); 
      } 
      catch(IllegalArgumentException e) 
      { 
       System.out.println("Error"); 
       System.exit(0); 
      } 

      ArrayList<String> ipRange = new ArrayList<>(); 
      String currentIp = startIp; 

      for(int i = 0; i < number; i++) 
      { 
       String nextIp = nextIpAddress(currentIp); 
       ipRange.add(nextIp); 
       currentIp = nextIp; 
       //System.out.println("----------------------------------"); 
       System.out.println(nextIp); 
      } 
     } 
     else 
     { 
      System.out.println("Wrong number of arguments"); 
      System.out.println("Please try again"); 
     } 
} 


public static final String nextIpAddress(final String input) 
{ 
     final String[] tokens = input.split("\\."); 
     if (tokens.length != 4) 
      throw new IllegalArgumentException(); 
     for (int i = tokens.length - 1; i >= 0; i--) 
     { 
      final int item = Integer.parseInt(tokens[i]); 
      if (item < 255) 
      { 
       tokens[i] = String.valueOf(item + 1); 
       for (int j = i + 1; j < 4; j++) 
       { 
        tokens[j] = "0"; 
       } 
       break; 
      } 
     } 
     return new StringBuilder() 
       .append(tokens[0]).append('.') 
       .append(tokens[1]).append('.') 
       .append(tokens[2]).append('.') 
       .append(tokens[3]) 
       .toString();  
} 
} 
+0

что вы проходите в командной строке? –

+0

как вы это сделали? вы нашли решение? –

ответ

1

Это просто. Ваш запрос на внесение изменений изменяет IP слишком рано. Издание ваш for цикл, чтобы выглядеть следующим образом:

 System.out.println(currentIp); 
     ipRange.add(currentIp); 
     for(int i = 1; i < number; i++) 
     { 
      currentIp = nextIpAddress(currentIp); 
      ipRange.add(currentIp); 
      System.out.println(currentIp); 
     } 

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

+0

Ваше решение не оптимально. Вы делаете последнюю итерацию и пытаетесь получить следующий IP-адрес, который никогда не используется. – Stanislav

+0

Исправить. Он может перенести первую печать из цикла. Я сделаю редактирование. –

+0

Как бы так? Увеличивая начальный индекс до +1 instand из 0, количество итераций будет таким же, как у вас, за исключением того, что «начало в 1» кажется более понятным, чем «конец один до желаемого amout». –

2

Вы должны инициализировать диапазон с первым адресом внутрибрюшинно первым, а затем сделать число итераций равно количеству адресов-1, потому что у вас есть уже один адрес в списке:

ipRange.add(currentIp); 
for(int i = 0; i < number-1; i++) 
{ 
    currentIp = nextIpAddress(currentIp); 
    ipRange.add(currentIp); 
} 

рад см., что вы нашли мой answer полезный))

Смежные вопросы