读书人

帮小弟我看上这个if-else语句

发布时间: 2012-09-03 09:48:39 作者: rapoo

帮我看下这个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”的原因了

读书人网 >Android

热点推荐