如果声明给我带来问题,那很奇怪

时间:2018-04-25 02:41:23

标签: java

我想解决的问题是

  

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地址的其他部分,但我只插入了这个,因为我认为在解决我的问题方面更重要。如果需要,我可以把整个代码。

1 个答案:

答案 0 :(得分:2)

这里有两大问题:

  1. 为什么在false时返回Integer.parseInt(temp) <= 255false返回不表示错误吗? IP号码&lt; = 255正好是一个错误!
  2. 你的for循环显然是要检查所有数字的有效性,只检查第一个数字。为什么?循环内if的两种情况都会返回。摆脱else return true;上的if案例。虽然你想要立即返回false,但是如果找到一个坏数字,你也希望只要你找到好的数字就保持循环。