2016-04-12 82 views
-1

我想要一個哈希映射來存儲鍵和值的整數。通過使用嵌套for循環,我認爲它應該工作。我似乎沒有完全理解嵌套循環中的程序流。下面我的代碼:通過嵌套for循環初始化哈希映射

import java.util.HashMap; 

public class Main { 

public static void main(String[] args) { 

    HashMap<Integer, Integer> hMap = new HashMap<>(); 

    //initializing running variables here to reuse in "display hashmap" loop 
    int key = 48; 
    int values = 65; 

    //set keys and values to hashmap via nested for-loop 
    for (key = 48; key < 74; key++) { 
     for (values = 65; values < 91; values++) { 
      hMap.put(key, values); 
     } 
    } 

    //display hashmap via nested for-loop 
    for (key = 48; key < 74; key++) { 
     System.out.println("Key: " + key + ", Value: " + hMap.get(key)); 
    } 
    } 
} 

這是當前控制檯輸出:

Key: 48, Value: 90 
Key: 49, Value: 90 
Key: 50, Value: 90 
Key: 51, Value: 90 
Key: 52, Value: 90 
Key: 53, Value: 90 
... 

這是控制檯輸出我想:

Key: 48, Value: 65 
Key: 49, Value: 66 
Key: 50, Value: 67 
Key: 51, Value: 68 
Key: 52, Value: 69 
Key: 53, Value: 70 
... 

我現在知道,內部的循環運行直到滿足結束條件並因此覆蓋變量value。但是我怎樣才能達到預期的控制檯輸出,如上所示?

非常感謝。我更喜歡初學者友好的回覆:)

+0

爲什麼我的問題被低估?我盡我所能儘可能精確。 – Fortun

回答

1

你不需要嵌套循環。您正嘗試在Map中的put之間的所有組合爲key s在48和73之間,value s在65和90之間,但只保留每個鍵的最後一個值,因爲Map不允許重複鍵。

單迴路會做你需要的東西:

int value = 65; 
for (int key = 48; key < 74; key++) { 
    hMap.put (key, value++); 
} 

在地圖把value++將投入value結構圖中的電流值,並增加了value變量爲下一次迭代。下面的代碼

int value = 65; 
for (int key = 48; key < 74; key++) { 
    hMap.put (key, value); 
    value++ 
} 
+0

您應該在put() – Rich

+0

的調用環境中解釋post增量操作符。非常感謝Eran。這幫助了我很多,並且精確地找到了我期待的結果! :) – Fortun

0

使用::

//set keys and values to hashmap via nested for-loop 
int values = 65; 
for (key = 48; key < 74 && values < 91; key++) { 
     hMap.put(key, values); 
     values++; 
} 

參見輸出here

鍵:48,值:65
鍵:它相當於49,值:66
Key:50,Value:67
Key:51,Value:68
重點:52,值:69
鍵:53,值:70
鍵:54,值:71
.........

+0

謝謝。我會upvote您的回覆,但我還沒有足夠的聲譽呢:/ – Fortun

0

的問題是在循環。對於每個鍵,您都重複放置所有的值。

添加和輸出像這樣的:

for (key = 48; key < 74; key++) { 
    for (values = 65; values < 91; values++) { 
     hMap.put(key, values); 
     System.out.println("put Key: " + key + ", Value: " + values); 
    } 
} 

你西港島線看到你的錯誤:

put Key: 48, Value: 65 
put Key: 48, Value: 66 
put Key: 48, Value: 67 
put Key: 48, Value: 68 
put Key: 48, Value: 69 
put Key: 48, Value: 70 
put Key: 48, Value: 71 
put Key: 48, Value: 72 
put Key: 48, Value: 73 
put Key: 48, Value: 74 
put Key: 48, Value: 75 
put Key: 48, Value: 76 
put Key: 48, Value: 77 
put Key: 48, Value: 78 
put Key: 48, Value: 79 
put Key: 48, Value: 80 
put Key: 48, Value: 81 
put Key: 48, Value: 82 
put Key: 48, Value: 83 
put Key: 48, Value: 84 
put Key: 48, Value: 85 
put Key: 48, Value: 86 
put Key: 48, Value: 87 
put Key: 48, Value: 88 
put Key: 48, Value: 89 
put Key: 48, Value: 90 
put Key: 49, Value: 65 
put Key: 49, Value: 66 
put Key: 49, Value: 67 
put Key: 49, Value: 68 
put Key: 49, Value: 69 
put Key: 49, Value: 70 
... 

在地圖上的每個鍵的最後的值總是90

試試這個:

for (key = 48; key < 74; key++) { 
    hMap.put(key, values++); 
} 
+0

感謝您的回覆Guillaume。這使得內部循環運行得更加清晰,直到滿足結束條件,然後才返回到外部循環。 – Fortun