BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / mobile-terminal-at / #13372同步于 2014/4/21
该镜像源已超过 30 天没有更新,可能在源站已被删除。
MobileTerminalAT机器人发帖

Android中HashMap出现的问题【楼主已疯】

kingkongman
2014/4/21镜像同步34 回复
补充:讨论的是执行顺序错乱的问题,不是结果正确与否的问题 楼主真的快哭了呢 ————————————————————题记 直接上代码: Android代码: public class Test extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.activity_test); get(); } private String get(){ HashMap<String, String> map = new HashMap<String, String>(); map.put("a", "a"); map.put("b", "b"); int level[] = new int[3]; //line1 level[0] = (map.get("a") != null) ? 1 : 2; //line2 level[1] = (map.get("c") != null) ? 1 : 2; //line3 level[2] = (map.get("b") != null) ? 1 : 2; //line4 return ""; //line5 } } 单步调试在line1处加断点,执行顺序line1->line2->line3->line2->line3->line4...(注:line3直接到line2,没有到line4) 楼主不死心换了个顺序像这样: int level[] = new int[3]; //line1 level[1] = (map.get("c") != null) ? 1 : 2; //line2 level[0] = (map.get("a") != null) ? 1 : 2; //line3 level[2] = (map.get("b") != null) ? 1 : 2; //line4 return ""; //line5 此处把level[1]放到level[0]上面,依旧line1处加断点 执行顺序line1->line2->line5->line2->line3->line4->line5 。。。(楼主此时已疯[ema1]) 但是楼主依旧不死心,新建了一个JAVA工程(不是Android工程),代码如下: class SomeTest{ public static void main(String[] args){ get(); } public static String get(){ HashMap<String, String> map = new HashMap<String, String>(); map.put("a", "a"); map.put("b", "b"); int level[] = new int[3]; level[0] = (map.get("a") != null) ? 1 : 2; level[1] = (map.get("c") != null) ? 1 : 2; level[2] = (map.get("b") != null) ? 1 : 2; return ""; } } 执行顺序正常,没有错误。 楼主分别看了下Android工程与JAVA工程所用的Java Compiler,JAVA勾选的是 Use compliance from execution environment 'JavaSE-1.7' on the 'Java Build Path' Compiler compliance level 1.7 而Android工程勾选的是Use default compliance settings 1.6 楼主猜测是不是JDK编译器版本的问题 于是把JAVA工程也改为Use default compliance settings 1.6,但是,JAVA工程依旧顺利的执行。。。楼主再次疯掉。。。 马上振作起来,由于Android无法勾选 Use compliance from execution environment 'JavaSE-1.7' on the 'Java Build Path' Compiler compliance level 1.7 于是我就改了Use default compliance settings 1.7,然后就报错了,然后就没脾气了... 求解。折腾一天楼主已疯 特来发帖[ema1]
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
icyfox机器人#1 · 2014/4/21
不知道你为啥那么在乎顺序,但是看起来结果好像没啥问题啊。
kingkongman机器人#2 · 2014/4/21
结果肯定是没问题的。 。但是顺序还是很奇怪啊。无法理解啊。楼主轻微强迫症。。真的快疯了[ema1] 你那边顺序会错乱么? 【 在 icyfox 的大作中提到: 】 : 不知道你为啥那么在乎顺序,但是看起来结果好像没啥问题啊。 : [upload=1][/upload]
icyfox机器人#3 · 2014/4/21
如何知道顺序对不对? 【 在 kingkongman (kingkongman) 的大作中提到: 】 : 结果肯定是没问题的。 。但是顺序还是很奇怪啊。无法理解啊。楼主轻微强迫症。。真的快疯了[ema1] 你那边顺序会错乱么?
icyfox机器人#4 · 2014/4/21
这样可以证明顺序没问题么?
kingkongman机器人#5 · 2014/4/21
加断点跑一下,逐句Step Over 【 在 icyfox 的大作中提到: 】 : 如何知道顺序对不对? :
icyfox机器人#6 · 2014/4/21
我做安卓没打断点的习惯,一般就是加log,意义一样吧 【 在 kingkongman (kingkongman) 的大作中提到: 】 : 加断点跑一下,逐句Step Over
kingkongman机器人#7 · 2014/4/21
很遗憾的说这样不能证明,执行顺序是这样的line3->line2->line3,你所标注的TAG 1的二次并没有执行。所以结果依旧是输出四个TAG 【 在 icyfox 的大作中提到: 】 : 这样可以证明顺序没问题么? : [upload=1][/upload]
kingkongman机器人#8 · 2014/4/21
更具体的说line3->line2后直接跳过了Log.i("TAG 1",***) 继续执行line3。理论和实际还是有些偏差的 【 在 icyfox 的大作中提到: 】 : 我做安卓没打断点的习惯,一般就是加log,意义一样吧 :
icyfox机器人#9 · 2014/4/21
这个代码的逻辑 凭什么会有line3 -> line2的可能性 【 在 kingkongman 的大作中提到: 】 : 很遗憾的说这样不能证明,执行顺序是这样的line3->line2->line3,你所标注的TAG 1的二次并没有执行。所以结果依旧是输出四个TAG