2013-12-11 74 views
0

「米有問題的理解,究竟這段代碼的作用:請幫助我瞭解這一段代碼在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);是做什麼用的?

對不起,我問這個問題,但我根本不明白。謝謝:)

+5

1.和3.您是否閱讀過hashMap的文檔? 2.搜索三元運算符。 –

+1

'HashMap#put',與賦值運算符和另一個'HashMap#put'組合的三元運算符。 –

+0

我試圖讀取hashmap的功能,但我不確定。它存儲了以後可以收到的東西嗎? – Paludan

回答

3

是什麼totals.put(i,0)辦?

將值0存儲在key i處的hashmaptotals

total_value += (L == 0) ? -1 : 1;是做什麼的?

total_value += 1;的含義一樣total_value = total_value + 1

?是ternary operator。這種說法(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

編輯:一個Hashmap保存鍵值對。所以第一個參數是關鍵,第二個是價值。

a += 1;的含義一樣a = a + 1

a = b == 1 ? 1 : 2;意味着同樣喜歡:

if(b == 1) 
    a = 1; 
else 
    a = 2; 
+0

得到的。put的第一個參數是key,第二個參數是value。 – dansalmo

+0

好吧超級謝謝你:)我覺得我現在明白我的問題了,這個評論和這個答案。不幸的是有人把我拉下來:( – Paludan

+1

「put的第二個參數是元素應該放置在散列表中的可選索引」......不會更錯!在Hashmap中沒有元素的順序,因此沒有索引。正如dansalmo所說:把(key,value) –

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)。做?

它將一個鍵值對添加到散列表。 total_value是關鍵字,totals.get(total_value)+1是與關鍵字關聯的值。

希望有所幫助。

1

關於這個問題N.2
傳統的if-else構建C,Java和JavaScript寫的是:

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