了解这段代码到底有什么问题:
1. HashMap<Integer, Integer> totals = new HashMap<>();
2.
3. for (int i = -NBR_STEPS; i <= NBR_STEPS; i++) {
4. totals.put(i, 0);
5. }
6. System.out.println("");
7. for (int i = 0; i < NBR_WALKS; i++) {
8. int total_value = 0;
9. for (int j = 0; j < NBR_STEPS; j++) {
10. int L = (int) (Math.random() * 2);
11. total_value += (L == 0) ? -1 : 1;
12. }
13. totals.put(total_value, totals.get(total_value) + 1);
14. }
15. }
我不明白:
totals.put(i,0)
做什么?total_value += (L == 0) ? -1 : 1;
到底做了什么?totals.put(total_value, totals.get(total_value)+1);
做什么?对不起,我问这个问题,但我根本就不明白。谢谢:))
答案 0 :(得分:3)
totals.put(i,0)
做了什么?
将值0
存储在hashmap key i
的{{1}}。
totals
到底做了什么?
total_value += (L == 0) ? -1 : 1;
与total_value += 1;
?是ternary operator。此语句total_value = total_value + 1
的值为(L == 0) ? -1 : 1;
时的值
当-1
为(L == 0)
true
为1
,(L == 0)
为false
total_value += (L == 0) ? -1 : 1;
与:
if (L == 0)
total_value = total_value - 1; // subtract 1 from total_value
else
total_value = total_value + 1; // add 1 to total_value
totals.put(total_value, totals.get(total_value)+1);
做了什么?
将散列映射位置total_value+1
中的值复制到散列映射位置total_value
。它基本上将值从下一个位置复制到当前位置。
答案 1 :(得分:1)
编辑:Hashmap保存键值对。所以第一个参数是键,第二个是值。
a += 1;
与a = a + 1
a = b == 1 ? 1 : 2;
的含义相同:
if(b == 1)
a = 1;
else
a = 2;
答案 2 :(得分:1)
totals.put(i,0)做什么? 它为地图添加了一个键值对。变量“i”是键,“0”是与键相关联的值。
total_value + =(L == 0)是什么? -1:1;做到了吗? 这是一个If-else语句。简化版就是这样。
if(L==0)
total_value += -1
else{
total_value += 1
}
totals.put是什么(total_value,totals.get(total_value)+1);办?
它向hashmap添加一个键值对。 total_value是键,totals.get(total_value)+1是与键相关联的值。
希望有所帮助。
答案 3 :(得分:1)
关于问题n.2
编写了C,Java和JavaScript中的传统if-else结构:
if (a > b) {
result = x;
} else {
result = y;
}
这可以改写为以下三元声明:
result = a > b ? x : y;
在您的情况下,条件为(L==0)
如果这是真的:
total_value=total_value+-1
等......
total_value=total_value-1
如果条件不成立:
total_value=total_value+1