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

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

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

import java.util.Arrays;
public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int aCount = 0, bCount = 0, cCount = 0, dCount = 0, eCount = 0, errorCount = 0, privateCount = 0;
        while (scanner.hasNextLine()) {
            String s = scanner.nextLine();
            try {
                String[] arr = s.split("~");
                int[] ipArr = Arrays.asList(arr[0].split("\\.")).stream().mapToInt(Integer::valueOf).toArray();
                int[] maskArr = Arrays.asList(arr[1].split("\\.")).stream().mapToInt(Integer::valueOf).toArray();
                if (ipArr.length != 4 || maskArr.length != 4) {
                    throw new Exception();
                }
                for (int i = 0; i < 4; i++) {
                    if (ipArr[i] < 0 || ipArr[i] > 255 || maskArr[i] < 0 || maskArr[i] > 255) {
                        throw new Exception();
                    }
                }
                if (ipArr[0] != 0 && ipArr[0] != 127) {// 检查子网掩码
                    String bi = "";
                    for (int i = 0; i < 4; i++) {
                        String b = Integer.toBinaryString(maskArr[i]);
                        while (b.length() != 8) {
                            b = "0" + b;
                        }
                        bi += b;
                    }
                    if (bi.charAt(0) != 49 || bi.charAt(bi.length() - 1) != 48) {
                        throw new Exception();
                    }
                    int left = 0, right = bi.length() - 1;
                    for (;left < right; left++) {
                        if (bi.charAt(left) == 48) {
                            break;
                        }
                    }
                    for (;right >= 0; right--) {
                        if (bi.charAt(right) == 49) {
                            break;
                        }
                    }
                    if (left - right != 1) {
                        throw new Exception();// 非法子网掩码
                    }
                }
                if (ipArr[0] >= 240 && ipArr[0] <= 255) {// e类地址
                    eCount++;
                } else if (ipArr[0] >= 224) {// d类地址
                    dCount++;
                } else if (ipArr[0] >= 192) {// c类地址
                    cCount++;
                } else if (ipArr[0] >= 128) {// b类地址
                    bCount++;
                } else if (ipArr[0] >= 1 && ipArr[0] <= 126) {// a类地址
                    aCount++;
                }
                if (ipArr[0] == 10 
                    || (ipArr[0] == 172 && ipArr[1] >= 16 && ipArr[1] <= 31) 
                    || (ipArr[0] == 192 && ipArr[1] == 168)) {// 私有地址
                        privateCount++;
                    }
            } catch (Exception e) {
                errorCount++;// 非法ip或非法子网掩码
            }
        }
        System.out.println(aCount + " " + bCount + " " + cCount + " " + dCount + " " 
                           + eCount + " " + errorCount + " " + privateCount);
    }
}
全部评论

相关推荐

07-18 10:39
门头沟学院 Java
点赞 评论 收藏
分享
避坑恶心到我了大家好,今天我想跟大家聊聊我在成都千子成智能科技有限公司(以下简称千子成)的求职经历,希望能给大家一些参考。千子成的母公司是“同创主悦”,主要经营各种产品,比如菜刀、POS机、电话卡等等。听起来是不是有点像地推销售公司?没错,就是那种类型的公司。我当时刚毕业,急需一份临时工作,所以在BOSS上看到了千子成的招聘信息。他们承诺无责底薪5000元,还包住宿,这吸引了我。面试的时候,HR也说了同样的话,感觉挺靠谱的。于是,我满怀期待地等待结果。结果出来后,我通过了面试,第二天就收到了试岗通知。试岗的内容就是地推销售,公司划定一个区域,然后你就得见人就问,问店铺、问路人,一直问到他们有意向为止。如果他们有兴趣,你就得摇同事帮忙推动,促进成交。说说一天的工作安排吧。工作时间是从早上8:30到晚上18:30。早上7点有人叫你起床,收拾后去公司,然后唱歌跳舞(销售公司都这样),7:55早课(类似宣誓),8:05同事间联系销售话术,8:15分享销售技巧,8:30经理训话。9:20左右从公司下市场,公交、地铁、自行车自费。到了市场大概10点左右,开始地推工作。中午吃饭时间大约是12:00,公司附近的路边盖饭面馆店自费AA,吃饭时间大约40分钟左右。吃完饭后继续地推工作,没有所谓的固定中午午休时间。下午6点下班后返回公司,不能直接下班,需要与同事交流话术,经理讲话洗脑。正常情况下9点下班。整个上班的一天中,早上到公司就是站着的,到晚上下班前都是站着。每天步数2万步以上。公司员工没有自己的工位,百来号人挤在一个20平方米的空间里听经理洗脑。白天就在市场上奔波,公司的投入成本几乎只有租金和工资,没有中央空调。早上2小时,晚上加班2小时,纯蒸桑拿。没有任何福利,节假日也没有3倍工资之类的。偶尔会有冲的酸梅汤和西瓜什么的。公司的晋升路径也很有意思:新人—组长—领队—主管—副经理—经理。要求是业绩和团队人数,类似传销模式,把人留下来。新人不能加微信、不能吐槽公司、不能有负面情绪、不能谈恋爱、不能说累。在公司没有任何坐的地方,不能依墙而坐。早上吃早饭在公司外面的安全通道,未到上班时间还会让你吃快些不能磨蹭。总之就是想榨干你。复试的时候,带你的师傅会给你营造一个钱多事少离家近的工作氛围,吹嘘工资有多高、还能吹自己毕业于好大学。然后让你早点来公司、无偿加班、抓住你可能不会走的心思进一步压榨你。总之,大家在找工作的时候一定要擦亮眼睛,避免踩坑!———来自网友
qq乃乃好喝到咩噗茶:不要做没有专业门槛的工作
点赞 评论 收藏
分享
07-16 14:10
门头沟学院 Java
点赞 评论 收藏
分享
评论
4
1
分享

创作者周榜

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