有人可以帮助解决这个问题。我想使用命令行检查特定范围内的IP地址。
例如,我在cmd" java 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
这是我的代码,问题是我运行的代码将从#34; 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 :(得分:2)
您必须首先使用第一个IP地址初始化您的范围,然后使迭代次数等于地址数1,因为您的列表中已经有一个地址:
ipRange.add(currentIp);
for(int i = 0; i < number-1; i++)
{
currentIp = nextIpAddress(currentIp);
ipRange.add(currentIp);
}
很高兴看到你发现我的answer很有用))
答案 1 :(得分: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,您也想显示它。您可以输出它并在第二个地址开始循环。