京东笔试题警察,不知道错误在哪(自己找出了问题,谢谢各位)

public static  void main(String[] args){
	Scanner sc = new Scanner(System.in);
	 int n = sc.nextInt();
	if(n<1)return ;
        String s=sc.next();
        char li[]=s.toCharArray();
        HashSet num=new HashSet();
        for(int i=0;i<n;i++){
        	char a=li[i];
        	if(a=='#')
        	continue;
        	else if(a=='X')
        	continue;
        	else {
        		int b=a-'0';
        		int sta=i-b;
        		int end=i+b;
        		if(sta<0)
        			sta=0;
        		if(end>n)
        			end=n;
        		for(int j=sta;j<=end;j++){
        			if(li[j]=='X'&&j<n)
        				num.add(j);
        		}
        	}
        }
        System.out.println(num.size());
}
赛码网提示一直是50%,没看到自己错在哪,请各位指点。其中一组测试数据是
1
9
本地跑出来是0,但是赛马网是为空,不太清楚是不是自己写错了。
全部评论
谢谢各位的回复,错误是在于if(li[j]=='X'&&j<n),这里的j会达到n,这时候我们取li[n]的时候,数组越界了,所以应该是 if( j<n && li[j]=='X')
点赞 回复 分享
发布于 2017-04-07 22:46
if(li[j]=='X'&&j<n) 这个地方错了
点赞 回复 分享
发布于 2017-04-07 22:19
你编程题做的怎么样啊
点赞 回复 分享
发布于 2017-04-07 22:24
短路表达式,把j<n放在前面
点赞 回复 分享
发布于 2017-04-07 22:29

相关推荐

10-09 22:05
666 C++
找到工作就狠狠玩CSGO:报联合国演讲,报电子烟设计与制造
点赞 评论 收藏
分享
1 收藏 评论
分享
牛客网
牛客企业服务