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

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

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

import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        while (in.hasNext()) { 
            //输入子网掩码
            String a = in.next();
            //输入IP1
            String b = in.next();
            //输入IP2
            String c = in.next();
            System.out.println(myAns(a,b,c));
        }
    }
    
    private static Integer myAns(String mask , String ip1 , String ip2) {
        if (!(checkLegal(mask,true) && checkLegal(ip1,false) && checkLegal(ip2,false) ) ) {
            return 1;
        }
        if (andOperation(mask,ip1,ip2)) {
            return 0;
        }
        return 2;
    }
    
    //检查ip和子网掩码是否合法
    private static Boolean checkLegal(String ip, Boolean bool) {
        String [] strs = ip.trim().split("\\.");
        if(strs.length != 4) {//号段个数验证
            return false;
        }
        for (int i = 0 ; i < 4 ; i++) {
            int n;
            if (i == 0 && bool) {//验证子网掩码网络号-前缀
                n = Integer.valueOf(strs[i]);
                if (n != 255) {
                    return false;
                }
            } else if (i == 3 && bool) {//验证子网掩码网络号-后缀
                n = Integer.valueOf(strs[i]);
                if (n != 0) {
                    return false;
                }
            } else {
                n = Integer.valueOf(strs[i]);
                if (n < 0 || n > 255) {
                    return false;
                }
            }
            
            
        }
        return true;
    }
    
    //于子网掩码做与运算
    private static boolean andOperation(String mask,String ip1,String ip2) {
        String [] masks = mask.trim().split("\\.");
        String [] ip1s = ip1.trim().split("\\.");
        String [] ip2s = ip2.trim().split("\\.");
        
        for (int i = 0; i < 4; i++) {
            int m = Integer.valueOf(masks[i]);
            int p1 = Integer.valueOf(ip1s[i]);
            int p2 = Integer.valueOf(ip2s[i]);
            if ((p1 & m) != (p2 & m) ) {
                return false;
            }
        }
        
        return true;
    }
}
全部评论

相关推荐

10-27 17:26
东北大学 Java
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务