帮我看下这个if-else语句
- Java code
public String getVersion() { int result = ActionConstants.JSON_RESULT_FAIL; Map<String, Object> map = ActionContext.getContext().getParameters(); iPXianZhi(); System.out.println("hello"); JSONObject requestJson = new RequestUtil(map).getParameters(); JSONObject responseJson = new JSONObject(); logger.info("getVersion getParameters : " + map.toString()); try { if (validateVersionID(map, requestJson)) { int clientType = requestJson.getInt("clientType"); if (clientType == CommonConstants.CLIENT_TYPE_ANDROID || clientType == CommonConstants.CLIENT_TYPE_IPHONE) { Version version = versionService.getVersionByClientType(clientType); if (version != null) { responseJson.put(ActionConstants.REQUEST_PARAMETER_VERSIONID, checkNull(version.getCode())); responseJson.put("remark", checkNull(version.getRemark())); responseJson.put("path", checkNull(version.getPath())); } result = ActionConstants.JSON_RESULT_SUCCESS; } } logger.info("getVersion success "); } catch (Exception e) { e.printStackTrace(); this.getLogger().error("ERROR getVersion : " + e.getMessage()); } responseJson.put(ActionConstants.JSON_RESULT, result); json = responseJson; return JSON; } private void iPXianZhi() { HttpServletRequest request = ServletActionContext.getRequest(); Map<String, Object> mymap = new HashMap<String, Object>(); String ip = request.getRemoteAddr(); long shijian = System.currentTimeMillis(); System.out.println("ip:"+ip); System.out.println("shijian:"+shijian); System.out.println("size:"+list.size()); DecimalFormat decimalFormat = new DecimalFormat("0.00"); if (list.size()>0) { for (int i = 0; i < list.size(); i++) { if (list.get(i).get("ip").equals(ip)) { long time = (Long) list.get(i).get("time"); System.out.println("time:"+time); if ((shijian-time)/60000<=1) { System.out.println("时间间隔:"+decimalFormat.format((shijian-time)*1.00d/60000)+"m"); System.out.println("times:"+list.get(i).get("times")); if ((Integer)(list.get(i).get("times"))>2) { System.out.println("您一分钟内访问超过了2次"); }else { list.remove(i); mymap.put("ip", ip); mymap.put("time", time); mymap.put("times", ((Integer)(list.get(i).get("times")))+1); list.add(mymap); System.out.println("您一分钟内访问没有超过2次"); } System.out.println("访问次数"); }else { list.remove(i); mymap.put("ip", ip); mymap.put("time", shijian); mymap.put("times", 1); list.add(mymap); } System.out.println("时间间隔"); }else { mymap.put("ip", ip); mymap.put("time", shijian); mymap.put("times", 1); list.add(mymap); } } System.out.println("大小"); }else { mymap.put("ip", ip); mymap.put("time", shijian); mymap.put("times", 1); list.add(mymap); } }
为什么执行到方法iPXianZhi()的时候,如果list.size()<=0,则会执行方法iPXianZhi()后面的语句,打印那个hello,如果list.size()>0则执行到最里层那个if-else的时候就完了呢,不执行iPXianZhi()后面的语句了,不打印hello,这可能是java的语法知识我还没理解,谁帮忙解释一下。谢谢!
[解决办法]
LZ DeBug一下吧,看看在list.size()>0时 System.out.println("大小");有输出结果么。我猜可能的原因你去尝试一下吧1 循环是否结束, 2 是否出现异常。 希望对你有所帮助
[解决办法]
list.size()是得到数组元素的总数,如果数组不为空,就把所有元素删掉,假如mymap,否则,直接加入mymap.
[解决办法]
如果访问次数和时间间隔都打印了,大小没打印,就是循环还没结束
[解决办法]
不是java的语法问题,是你代码写的有问题。
当list.size>0时,楼主的代码:
list.remove(i);
---------------
list.add(mymap);
这句有问题,List每remove掉一个元素以后,后面的元素都会向前移动,此时如果执行i=i+1,则刚刚移过来的元素没有被读取。
而且在循环中执行代码:
if (list.get(i).get("ip").equals(ip)) {}
else {
mymap.put("ip", ip);
mymap.put("time", shijian);
mymap.put("times", 1);
list.add(mymap);//注意这句,可能造成一直循环
}
可能造成无限循环,这也就是楼主说的“如果list.size()>0则执行到最里层那个if-else的时候就完了呢,不执行iPXianZhi()后面的语句了,不打印hello”的原因了