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

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;

    }


}