java 笔试题-微软4月笔试题第二题,为什么本地运行没错,提交是RE,实在想不出来,求救!!

问题描述

微软4月笔试题第二题,为什么本地运行没错,提交是RE,实在想不出来,求救!!
 import java.util.ArrayList;
import java.util.Scanner;

public class Main {
    int allowS = 0;//rules allow数组大小
    int denyS = 0;
    ArrayList<String> allow = new ArrayList<>();//用来存放动态变化的rules,整个类都要使用,则定义为实例变量
    ArrayList<String> deny = new ArrayList<>();

    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        int N = input.nextInt();
        int M = input.nextInt();
        Main webser = new Main();
        if(1<=N && M<=100000){
            webser.rules(N);
            String[] output = webser.request(M);
            for(int j=0;j<output.length;j++){
                System.out.println(output[j]);
            }
            //sca.close();//写完之后就要close,否则容易忘记
        }
        input.close();

    }
    /*
     * @param n为rules个数,此方法用来封装rules
     */
    public void rules(int n){

        @SuppressWarnings("resource")
        Scanner sca = new Scanner(System.in);
        for(int i=0;i<n;i++){
            String s = sca.nextLine();
            String[] rule = s.split(" ");//返回字符串数组
            if(rule[0].equals("allow")){
                allow.add(rule[1]);
                allowS++;
            }else if(rule[0].equals("deny")){
                deny.add(rule[1]);
                denyS++;
            }
        }
        //sca.close();如果把这个流关闭了,再调用request方法中的输入流就不行了
    }
    public String[] request(int m){
        //开始匹配,最优的应该是用正则表达式匹配,稍后优化
        String[] output1 = new String[m];//没问题
        String[] requ = new String[m];//创建请求数组
        @SuppressWarnings("resource")
        Scanner sca = new Scanner(System.in);
        for(int i=0;i<m;i++){
            requ[i] = sca.nextLine();//输入请求ip数组
        }
        //开始遍历每一次request是否符合命中rules
        circle:
        for(int j=0;j<m;j++){
            for(int k=0;k<allow.size();k++){
                if(requ[j].equals(allow.get(k))){
                    output1[j] = "YES";//return "YES";
                    continue circle;
                }else if(allow.get(k).contains("/")){
                    String requBinary =IPtoInt.ipToint(requ[j]);
                    String[] allowip = allow.get(k).split("/");
                    int mask =Integer.parseInt(allowip[1]);//取位数
                    String allowstr = IPtoInt.ipToint(allowip[0]);
                    //String allowMask = allowstr.substring(0,mask);//变成字符串后,取前几位
                    if(requBinary.substring(0, mask).equals(allowstr.substring(0,mask))){
                        output1[j] = "YES";//return "YES";
                        continue circle;

                    }
                }
            }
            for(int k=0;k<deny.size();k++){
                if(requ[j].equals(deny.get(k))){
                    output1[j] = "NO";//return "NO";
                    continue circle;
                }else if(deny.get(k).contains("/")){
                    String requBinary = IPtoInt.ipToint(requ[j]);
                    String[] denyip = deny.get(k).split("/");
                    int mask = Integer.parseInt(denyip[1]);
                    String denystr = IPtoInt.ipToint(denyip[0]);
                    String denyMask = denystr.substring(0,mask);
                    if((requBinary.substring(0,mask)).equals(denyMask)){//必须对比前mask位
                        output1[j] = "NO";//return "NO";
                        continue circle;
                    }
                }
            }
            if(output1[j].length()==0)
                output1[j] = "YES";

        }
        //sca.close();
        return output1;//返回字符串数组
    }
}
class IPtoInt {
    // 重写了方法,将ip地址转换为二进制。
    public static String ipToint(String strIP) {
        String[] ip = new String[4];
        String zero = "00000000";//用来补位的
        String[] ipstr = strIP.split("\.");
        // 将每个.之间的字符串转换成整型
        ip[0] = Integer.toBinaryString(Integer.parseInt(ipstr[0]));
        ip[1] = Integer.toBinaryString(Integer.parseInt(ipstr[1]));
        ip[2] = Integer.toBinaryString(Integer.parseInt(ipstr[2]));
        ip[3] = Integer.toBinaryString(Integer.parseInt(ipstr[3]));
        for(int i=0;i<4;i++){
            if(ip[i].length()<8){
                ip[i] =zero.substring(0,8-ip[i].length()) + ip[i];//如果每一段ip不足八位,那么用字符串加法高位补0,不用循环,一次性补0,因为ip.length()一直会变
            }
        }
        return ip[0]+ip[1]+ip[2]+ip[3];
    }
 } 

解决方案

http://blog.csdn.net/u112222222/article/details/51164396

时间: 2024-09-22 21:47:30

java 笔试题-微软4月笔试题第二题,为什么本地运行没错,提交是RE,实在想不出来,求救!!的相关文章

一道有趣的字符串笔试题 以及队列问题笔试题

问题描述 1. 请完成函数,该函数输入一个纯英文字符串,请打印出该字符串中每个字符(区分大小写)出现的次数,并按照出现的次数从大到小排列,如输入"asisaB",则打印出a=2,s=2,i=1,B=1. 注:要求不能使用如Map,List等集合类. 2.使用Java实现阻塞队列BlockQueue,请插入数据调用Offer,如果已满则等待.获取数据调用take,如果队列为空,则等待.请完成该类 请高人写出程序代码 加有些详细注解更佳 谢谢!!!!!!!!!!!!!!!!! 解决方案 第

java 多态性详解及常见面试题_java

java多态性 多态分两种: (1)   编译时多态(设计时多态):方法重载. (2)   运行时多态:JAVA运行时系统根据调用该方法的实例的类型来决定选择调用哪个方法则被称为运行时多态.(我们平时说得多的事运行时多态,所以多态主要也是指运行时多态) 运行时多态存在的三个必要条件: 一.要有继承(包括接口的实现): 二.要有重写: 三.父类引用指向子类对象. 多态的好处: 1.可替换性(substitutability).多态对已存在代码具有可替换性.例如,多态对圆Circle类工作,对其他任

金融安全资讯精选 2017年第十四期:十大顶级终端安全提供商报告,Uber承认数据泄露,微软“11月周二补丁日”发布53个漏洞补丁

[行业动态] 1.Gartner报告:十大顶级终端安全提供商 点击查看原文 点评:Gartner的<2017年终端安全魔力象限>报告为该行业中的公司排了个序,分为"领导者"."挑战者"."特定领域厂商"或"远见厂商".前十名包括趋势科技,Sophos,卡巴斯基实验室,赛门铁克,McAfee,微软,Cylance, SentinelOne,Carbon Black,CrowdStrike. [行业动态] 2.Uber

游戏安全资讯精选 2017年第十四期:游戏盾入门版推出降价63%,《2017年网络安全产业白皮书》发布,微软“11月周二补丁日”补丁一览

[本周游戏行业DDoS攻击态势] 据阿里云DDoS监控中心数据显示,近期DDoS 攻击增加明显,主要攻击目标是游戏和线上推广行业的厂商.请请相关的用户做好DDoS 攻击的防护措施. [行业动态] 信通院发布<2017年网络安全产业白皮书>点击查看原文 我国网络安全产业发展的情况: (一)产业概况: 我国网络安全产业规模高速增长.2016年我国网络安全产业规模约为344.09亿元,较2015年增长21.7%,预计2017年达到457.13亿元.
 (二)区域分布:重点城市加快产业布局,产业集群效

Java获取时间年、月、日的方法

  本文实例讲述了Java获取时间年.月.日的方法.分享给大家供大家参考.具体实现方法如下: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 package com.date.demo; import jav

游戏安全资讯精选 2017年 第三期:游戏行业DDoS攻击上周加重,Xshell后门事件原创分析报告,微软“8月周二补丁日”全盘点

  [每周行业DDoS攻击态势] 上周,游戏行业300Gbps以上流量的DDoS攻击次数增加明显,且发生多次700Gbps以上的攻击,单日攻击达本月最多.建议游戏公司安全负责人做好带宽和IP 储备,和相应防护手段.     [游戏安全动态] 研究数据:游戏应用是钓鱼攻击的主要来源.点击查看原文   概要: 根据移动安全公司Wandera的研究,游戏应用是黑客对企业设备发起钓鱼攻击的最大来源.  Wandera测试了10万个企业设备,来分析网路钓鱼网站的流量.其中,游戏应用(25.6%)和电子邮件

游戏安全资讯精选 2017年 第八期:从“马甲”到“刷金”,盘点网络游戏的攻击和欺诈,微软“9月周二补丁日”发布81个漏洞补丁,系统优化工具CCleaner被植入后门

  [每周游戏行业DDoS态势]     [游戏安全动态] 从"马甲"到"刷金",盘点网络游戏的攻击和欺诈.点击查看原文     概要:对网络游戏的攻击有两大目的,除了暴利之外,黑客的曝光和名声也是驱动因素.对网络游戏攻击的常见方式有:虚假注册(Phantom Registrations)."马甲攻击"(Sock Puppet):论坛或社区用户通过"马甲"假装成另外一个人参与有关自己及自己作品的讨论或者评论:大规模钓鱼攻击:木

导入word-.NET试题库怎么将word试题导入数据库并在界面显示出来呀?大神,求顶!

问题描述 .NET试题库怎么将word试题导入数据库并在界面显示出来呀?大神,求顶! 我在创建一个.NET试题库,但是不知道怎么把word里的试题导入到sql server数据库中,并让它在界面上显示出来,求大神帮忙!!! 解决方案 还是先把内容放到excel表格再去导入数据库把

微软5月安全更新

摘要: 5月9日凌晨,微软按惯例向全球发布了本月的7个安全补丁,修复了Windows.Office..NET Framework及Silver light等组件的多个高危严重级别的漏洞,其中Office的严重漏洞可导致系统被完全控制. 5月9日凌晨,微软按惯例向全球发布了本月的7个安全补丁,修复了Windows.Office..NET Framework及Silver light等组件的多个高危严重级别的漏洞,其中Office的严重漏洞可导致系统被完全控制.金山卫士称已第一时间推送5月安全更新,