2016-04-12 85 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