我想解决的问题是
IP地址是分配给每个设备的数字标签(例如, 计算机,打印机)参与使用的计算机网络 用于通信的Internet协议。有两个版本的 Internet协议,因此有两个版本的地址。其中之一是 IPv4地址。
IPv4地址以点分十进制表示法表示,其中包含 四个十进制数,每个包含0到255(含), 用点分隔,例如172.16.254.1。
给定一个字符串,找出它是否满足IPv4地址命名 规则。
实施例
对于inputString =" 172.16.254.1",输出应为 isIPv4Address(inputString)= true;
对于inputString =" 172.316.254.1",输出应为 isIPv4Address(inputString)= false。
316不在[0,255]范围内。
对于inputString =" .254.255.0",输出应为 isIPv4Address(inputString)= false。
没有第一个号码。
输入/输出
[执行时间限制] 3秒(java)
[input] string inputString
保证约束:1≤inputString.length≤30。
[output] boolean
如果inputString满足IPv4地址命名规则,则为true,false 否则。
我真的很接近解决这个问题,但我似乎无法克服java似乎无法接受的这种奇怪的逻辑错误。基本上我使用Integer.parseInt(temp)解析一个字符串,并检查它是否小于或等于255.在它不应该返回false的情况下,temp = 172.我知道这是因为我已经多次调试过我的代码了。 代码:
while(inputString.length() > 0){
if(inputString.lastIndexOf('.') == -1) {
temp = inputString.substring(0, inputString.length());
if(Integer.parseInt(temp) <= 255)
{return false;}
for(int i = 0; i<temp.length(); i++) {
if(!Character.isDigit(temp.charAt(i))){
return false;
}else {
return true;
}
}
}
while循环有点长,因为它处理IPV4地址的其他部分,但我只插入了这个,因为我认为在解决我的问题方面更重要。如果需要,我可以把整个代码。
答案 0 :(得分:2)
这里有两大问题:
false
时返回Integer.parseInt(temp) <= 255
? false
返回不表示错误吗? IP号码&lt; = 255正好是一个错误!for
循环显然是要检查所有数字的有效性,只检查第一个数字。为什么?循环内if
的两种情况都会返回。摆脱else return true;
上的if
案例。虽然你做想要立即返回false
,但是如果找到一个坏数字,你也希望只要你找到好的数字就保持循环。