题解 | #识别有效的IP地址和掩码并进行分类统计#

识别有效的IP地址和掩码并进行分类统计

http://www.nowcoder.com/practice/de538edd6f7e4bc3a5689723a7435682

我是真的无力吐槽这种题目,讲的不清不楚的!!!!!
注意点:
-1 255.255.255.255 不算子网掩码(调试1小时才发现)
-2 题目说的是,错误IP地址或错误掩码,就是这条输入错误了意思,
-3 说句实话,做这种写的又臭又长看的都恶心的代码不如不写

import java.security.PublicKey;
import java.util.*;
/*输入:
10.70.44.68~255.254.255.0
1.0.0.1~255.0.0.0
192.168.0.2~255.255.255.0
19..0.~255.255.255.0
复制
输出:
1 0 1 0 0 2 1
*/


public class Main {
    static int A = 0, B = 0, C = 0, D = 0, E = 0, error = 0, pri = 0;

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        while (scanner.hasNextLine()) {
            String s = scanner.nextLine();
            String[] split = s.split("~");
            if (split.length != 2) {
                error++;
                continue;
            }
            String left = split[0];
            String right = split[1];
            help(left, right);
           // System.out.println(A + " " + B + " " + C + " " + D + " " + E + " " + error + " " + pri);
        }
        System.out.println(A + " " + B + " " + C + " " + D + " " + E + " " + error + " " + pri);

    }

    private static void help(String left, String right) {
        String[] ips = left.split("\\.");
        String[] ip_2s = right.split("\\.");
        if (ips.length != 4 || ip_2s.length != 4) {
            error++;
            return;
        }
        int ip0 = Integer.parseInt(ips[0]);
        int ip1 = Integer.parseInt(ips[1]);
        int ip2 = Integer.parseInt(ips[2]);
        int ip3 = Integer.parseInt(ips[3]);
        int ip_0 = Integer.parseInt(ip_2s[0]);
        int ip_1 = Integer.parseInt(ip_2s[1]);
        int ip_2 = Integer.parseInt(ip_2s[2]);
        int ip_3 = Integer.parseInt(ip_2s[3]);
        if (ip0 > 255 || ip1 > 255 || ip2 > 255 || ip3 > 255 || ip_0 > 255 || ip_1 > 255 || ip_2 > 255 || ip_3 > 255) {
            error++;
            return;
        }
        if (!judge(ip_0, ip_1, ip_2, ip_3)) {
            error++;
            return;
        }
        if (ip0 > 0 && ip0 < 127) {
            A++;
            if (ip0 == 10) {
                pri++;
            }
            return;
        } else if (ip0 > 127 && ip0 < 192) {
            B++;
            if (ip0 == 172 && ip1 >= 16 && ip1 <= 31) {
                pri++;
            }
            return;
        } else if (ip0 >= 192 && ip0 <= 223) {
            C++;
            if (ip0 == 192 && ip1 == 168) {
                pri++;
            }
        } else if (ip0 >= 224 && ip0 <= 239) {
            D++;
        } else if (ip0 >= 240 && ip0 <= 255) {
            E++;
        }


    }

    private static boolean judge(int ip_0, int ip_1, int ip_2, int ip_3) {
        if (ip_0 == 255 && ip_1 == 255 && ip_2 == 255 && ip_3 == 255) {
            return false;
        }
        String i_0 = Integer.toBinaryString(ip_0);
        String i_1 = Integer.toBinaryString(ip_1);
        String i_2 = Integer.toBinaryString(ip_2);
        String i_3 = Integer.toBinaryString(ip_3);
        while (i_1.length() < 8) {
            i_1 = "0" + i_1;
        }
        while (i_2.length() < 8) {
            i_2 = "0" + i_2;
        }
        while (i_3.length() < 8) {
            i_3 = "0" + i_3;
        }
        char[] chars = (i_0 + i_1 + i_2 + i_3).toCharArray();
        boolean flage = false;
        for (int i = 0; i < chars.length; i++) {
            if (chars[i] == '0') {
                flage = true;
            }
            if (flage == true && chars[i] == '1') {
                return false;
            }

        }

        return true;
    }

}

全部评论

相关推荐

06-13 17:33
门头沟学院 Java
顺序不记了,大致顺序是这样的,有的相同知识点写分开了1.基本数据类型2.基本数据类型和包装类型的区别3.==和equals区别4.ArrayList与LinkedList区别5.hashmap底层原理,put操作时会发生什么6.说出几种树型数据结构7.B树和B+树区别8.jvm加载类机制9.线程池核心参数10.创建线程池的几种方式11.callable与runnable区别12.线程池怎么回收线程13.redis三剑客14.布隆过滤器原理,不要背八股,说说真正使用时遇到了问题没有(我说没有,不知道该怎么回答了)15.堆的内存结构16.自己在写项目时有没有遇见过oom,如何处理,不要背八股,根据真实经验,我说不会17.redis死锁怎么办,watchdog机制如何发现是否锁过期18.如何避免redis红锁19.一个表性别与年龄如何加索引20.自己的项目的QPS怎么测的,有没有真正遇到大数量表21.说一说泛型22.springboot自动装配原理23.springmvc与springboot区别24.aop使用过嘛?动态代理与静态代理区别25.spring循环依赖怎么解决26.你说用过es,es如何分片,怎么存的数据,1000万条数据怎么写入库中27.你说用limit,那么在数据量大之后,如何优化28.rabbitmq如何批次发送,批量读取,答了延迟队列和线程池,都不对29.计网知不知道smtp协议,不知道写了对不对,完全听懵了30.springcloud知道嘛?只是了解反问1.做什么的?短信服务,信息量能到千万级2.对我的建议,基础不错,但是不要只背八股,多去实际开发中理解。面试官人不错,虽然没露脸,但是中间会引导我回答问题,不会的也只是说对我要求没那么高。面完问我在济宁生活有没有困难,最快什么时候到,让人事给我聊薪资了。下午人事打电话,问我27届的会不会跑路,还在想办法如何使我不跑路,不想扣我薪资等。之后我再联系吧,还挺想去的😭,我真不跑路哥😢附一张河科大幽默大专图,科大就是大专罢了
查看30道真题和解析
点赞 评论 收藏
分享
06-27 12:54
已编辑
门头沟学院 Java
累了,讲讲我的大学经历吧,目前在家待业。我是一个二本院校软件工程专业。最开始选专业是觉得计算机感兴趣,所以选择了他。本人学习计算机是从大二暑假结束开始的,也就是大三开始。当时每天学习,我个人认为Java以及是我生活的一部分了,就这样持续学习了一年半,来到了大四上学期末,大概是在12月中旬,我终于找的到了一家上海中厂的实习,但我发现实习生的工作很枯燥,公司分配的活也不多,大多时间也是自己在自学。就这样我秋招末才找到实习。时间来到了3月中旬,公司说我可以转正,但是转正工资只有7000,不过很稳定,不加班,双休,因为要回学校参加答辩了,同时当时也是心高气傲,认为可以找到更好的,所以放弃了转正机会,回学校准备论文。准备论文期间就也没有投递简历。然后时间来到了5月中旬,这时春招基本也结束了,然后我开始投递简历,期间只是约到了几家下场面试。工资也只有6-7k,到现在我不知道该怎么办了。已经没有当初学习的心劲了,好累呀,但是又不知道该干什么去。在家就是打游戏,boss简历投一投。每天日重一次。26秋招都说是针对26届的人,25怎么办。我好绝望。要不要参加考公、考研、央国企这些的。有没有大佬可以帮帮我。为什么感觉别人找工作都是顺其自然的事情,我感觉自己每一步都在艰难追赶。八股文背了又忘背了又忘,我每次都花很长时间去理解他,可是现在感觉八股、项目都忘完了。真的已经没有力气再去学习了。图片是我的简历,有没有大哥可以指正一下,或者说我应该走哪条路,有点不想在找工作了。
码客明:太累了就休息一下兄弟,人生不会完蛋的
如果实习可以转正,你会不...
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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