• 华为机试-判断两个IP是否属于同一子网


    题目描述
    子网掩码是用来判断任意两台计算机的IP地址是否属于同一子网络的根据。
    子网掩码与IP地址结构相同,是32位二进制数,其中网络号部分全为“1”和主机号部分全为“0”。
    利用子网掩码可以判断两台主机是否中同一子网中。
    若两台主机的IP地址分别与它们的子网掩码相“与”后的结果相同,则说明这两台主机在同一子网中。
    示例:
    I P 地址  192.168.0.1
    子网掩码  255.255.255.0
    转化为二进制进行运算:
    I P 地址 11010000.10101000.00000000.00000001
    子网掩码 11111111.11111111.11111111.00000000
    AND运算
        11000000.10101000.00000000.00000000
    转化为十进制后为:
        192.168.0.0

    I P 地址  192.168.0.254
    子网掩码  255.255.255.0

    转化为二进制进行运算:
    I P 地址 11010000.10101000.00000000.11111110
    子网掩码 11111111.11111111.11111111.00000000
    AND运算
         11000000.10101000.00000000.00000000
    转化为十进制后为:
         192.168.0.0
    通过以上对两台计算机IP地址与子网掩码的AND运算后,我们可以看到它运算结果是一样的。均为192.168.0.0,所以这二台计算机可视为是同一子网络。
    /*
    * 功能: 判断两台计算机IP地址是同一子网络。
    * 输入参数: String Mask: 子网掩码,格式:“255.255.255.0”;
    * String ip1: 计算机1的IP地址,格式:“192.168.0.254”;
    * String ip2: 计算机2的IP地址,格式:“192.168.0.1”;
    *
    * 返回值: 0:IP1与IP2属于同一子网络; 1:IP地址或子网掩码格式非法; 2:IP1与IP2不属于同一子网络
    */
    public int checkNetSegment(String mask, String ip1, String ip2)
    {
    /*在这里实现功能*/
    return 0;
    }

    输入描述:
    输入子网掩码、两个ip地址
    输出描述:
    得到计算结果
    示例1
    输入

    255.255.255.0 192.168.224.256 192.168.10.4
    输出

    1

    【有问题需要解决255.0】

    程序实现

    1. import java.util.Scanner;  
    2.   
    3. /** 
    4.  * 题目描述 子网掩码是用来判断任意两台计算机的IP地址是否属于同一子网络的根据。 
    5.  * 子网掩码与IP地址结构相同,是32位二进制数,其中网络号部分全为“1”和主机号部分全为“0”。 利用子网掩码可以判断两台主机是否中同一子网中。 
    6.  * 若两台主机的IP地址分别与它们的子网掩码相“与”后的结果相同,则说明这两台主机在同一子网中。 示例: I P 地址 192.168.0.1 子网掩码 
    7.  * 255.255.255.0 转化为二进制进行运算: I P 地址 11010000.10101000.00000000.00000001 子网掩码 
    8.  * 11111111.11111111.11111111.00000000 AND运算 11000000.10101000.00000000.00000000 
    9.  * 转化为十进制后为: 192.168.0.0 
    10.  *  
    11.  * I P 地址 192.168.0.254 子网掩码 255.255.255.0 
    12.  *  
    13.  * 转化为二进制进行运算: IP 地址 11010000.10101000.00000000.11111110 子网掩码 
    14.  * 11111111.11111111.11111111.00000000 AND运算 11000000.10101000.00000000.00000000 
    15.  * 转化为十进制后为: 192.168.0.0 
    16.  * 通过以上对两台计算机IP地址与子网掩码的AND运算后,我们可以看到它运算结果是一样的。均为192.168.0.0,所以这二台计算机可视为是同一子网络。 
    17.  *  
    18.  */  
    19. public class Main {  
    20.     public static void main(String[] args) {  
    21.         @SuppressWarnings("resource")  
    22.         Scanner scanner = new Scanner(System.in);  
    23.         while (scanner.hasNext()) {  
    24.   
    25.             String mask = scanner.next();  
    26.             String ip1 = scanner.next();  
    27.             String ip2 = scanner.next();  
    28.             int result = checkNetSegment(mask, ip1, ip2);  
    29.             System.out.println(result);  
    30.   
    31.         }  
    32.   
    33.     }  
    34.   
    35.     private static int checkNetSegment(String mask, String ip1, String ip2) {  
    36.         if (checkMask(mask) && checkIP(ip1) && checkIP(ip2)) {  
    37.             String[] stringMask = mask.split("\.");  
    38.             String[] stringIp1 = ip1.split("\.");  
    39.             String[] stringIp2 = ip2.split("\.");  
    40.             String[] stringMs;  
    41.             if (stringMask.length < 4) {  
    42.                 stringMs = new String[4];  
    43.                 for (int i = 0; i < stringMask.length; i++) {  
    44.                     stringMs[i] = stringMask[i];  
    45.                 }  
    46.                 for (int i = stringMask.length; i < stringMs.length; i++) {  
    47.                     stringMs[i] = "0";  
    48.                 }  
    49.             } else {  
    50.                 stringMs = stringMask;  
    51.             }  
    52.             int and1 = 0;  
    53.             int and2 = 0;  
    54.             for (int i = 0; i < stringMs.length; i++) {  
    55.                 and1 = Integer.parseInt(stringMs[i]) & Integer.parseInt(stringIp1[i]);  
    56.                 and2 = Integer.parseInt(stringMs[i]) & Integer.parseInt(stringIp2[i]);  
    57.   
    58.                 if (and1 != and2) {  
    59.                     return 2;  
    60.                 }  
    61.             }  
    62.   
    63.         }  
    64.         return 1;  
    65.   
    66.     }  
    67.   
    68.     private static boolean checkIP(String ip) {  
    69.         String[] stringArr = ip.split("\.");  
    70.   
    71.         return check(stringArr);  
    72.     }  
    73.   
    74.     private static boolean checkMask(String mask) {  
    75.         String[] stringArr = mask.split("\.");  
    76.   
    77.         for (int i = 0; i < stringArr.length - 1; i++) {  
    78.             if (Integer.parseInt(stringArr[i]) != 255) {  
    79.                 return false;  
    80.             }  
    81.         }  
    82.         if (Integer.parseInt(stringArr[stringArr.length - 1]) != 0) {  
    83.             return false;  
    84.         }  
    85.         return true;  
    86.   
    87.     }  
    88.   
    89.     private static boolean check(String[] arr) {  
    90.         int num = 0;  
    91.   
    92.         for (int i = 0; i < arr.length; i++) {  
    93.             num = Integer.parseInt(arr[i]);  
    94.             if (num < 0 || num > 255) {  
    95.                 return false;  
    96.             }  
    97.         }  
    98.         return true;  
    99.     }  
    100.   
    101. }  
  • 相关阅读:
    jQuery火箭图标返回顶部代码
    jQuery火箭图标返回顶部代码
    C#使用BouncyCastle操作国密SM3
    Win10 2004种子
    Excel对比两列数据,找到重复项
    CentOS7 + frp远程访问内网Windows电脑
    Docker on Mac OS
    MySQL5.6中查询多边形包含点情况(ST_Contains、ST_Within)
    SQL查询表的所有字段名
    清除文本中Html的标签
  • 原文地址:https://www.cnblogs.com/wwjldm/p/7158694.html
Copyright © 2020-2023  润新知