题解 | #判断两个IP是否属于同一子网#

判断两个IP是否属于同一子网

https://www.nowcoder.com/practice/34a597ee15eb4fa2b956f4c595f03218

题目较为简单,主要分为以下几步:

1.判断IP与子网掩码是否合法

(1)可以分为4份;
(2)是否为数字;
(3)IP需在0-255之间,子网掩码另外需判断是否左侧为1,右侧为0;

2.判断2个IP是否属于同一子网;

(1)直接进行位运算&

import java.util.*;

public class Main {
    public static void main(String[] args) {
    Scanner scan = new Scanner(System.in);
        while (scan.hasNextLine()) {
        String[] masks = scan.nextLine().split("\\.");
        String[] ip1s = scan.nextLine().split("\\.");
        String[] ip2s = scan.nextLine().split("\\.");

        //判断IP地址或者子网掩码是否非法输入
        if(!isLegalIP(ip1s)||!isLegalIP(ip2s)||!isLegalMask(masks)){
            System.out.println(1);
            continue;
        }

        //判断IP地址是否为同一子网络
        boolean flag=false;
        for(int i=0;i<4;i++){
            int mask=Integer.parseInt(masks[i]);
            int ip1=Integer.parseInt(ip1s[i]);
            int ip2=Integer.parseInt(ip2s[i]);
            if((mask&ip1)!=(mask&ip2)) {
                flag=true;
                System.out.println(2);
                break;
            }
        }
        if(!flag) System.out.println(0);


    }

}

    //判断子网掩码是否合法
    public static boolean isLegalMask(String[] masks) {
        String mask="";
        //不足四位
        if (masks.length != 4) return false;
        for (String item : masks) {
            //非数字
            if (item.equals("") || item.equals(" ")) return false;
            //超出数字范围
            if(Integer.parseInt(item)>255||Integer.parseInt(item)<0) return false;
            String str=Integer.toBinaryString(Integer.parseInt(item));
            while(str.length()<8){
                str="0"+str;
            }
//             String str=String.format("%08d",Integer.parseInt(Integer.toBinaryString(Integer.parseInt(item))));
            mask+=str;

        }
        //不符合数字规律
        if(!mask.matches("1+0*")) return false;

        return true;

    }

    //判断IP地址是否合法
    public static boolean isLegalIP(String[] ips) {
        if (ips.length != 4) return false;
        for (String item : ips) {
            //非数字
            if (item.equals("") || item.equals(" ")) return false;
            //不符合数字规律
            if (Integer.parseInt(item)>255||Integer.parseInt(item)<0) return false;
        }

        return true;

    }


}
全部评论

相关推荐

rbjjj:太杂了吧,同学,项目似乎都没深度,都是api调度耶,分层架构思想没有体现出来了,前端没有前端优化前端工程化体现,后端微服务以及分层架构没体现以及数据安全也没体现,核心再改改,注重于计算机网络,工程化,底层原理吧
点赞 评论 收藏
分享
11-11 16:40
已编辑
门头沟学院 人工智能
不知道怎么取名字_:这个有点不合理了,相当于已经毕业了,但还是没转正,这不就是白嫖
点赞 评论 收藏
分享
评论
2
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务