请帮我理解Java中的这段代码

时间:2013-12-11 18:29:34

标签: java

了解这段代码到底有什么问题:

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. }

我不明白:

  1. totals.put(i,0)做什么?
  2. total_value += (L == 0) ? -1 : 1;到底做了什么?
  3. totals.put(total_value, totals.get(total_value)+1);做什么?
  4. 对不起,我问这个问题,但我根本就不明白。谢谢:))

4 个答案:

答案 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)

时,true1(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