2016-04-12 1 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 
... 

теперь я знаю, что внутренний для -loop выполняется до тех пор, пока не будет достигнуто конечное условие и, следовательно, будет переопределять переменную value. Но как я могу достичь ожидаемого вывода консоли, как показано выше?

Спасибо, что заблаговременно. Я предпочитаю новички-дружеские ответы :)

+0

Почему мой вопрос ниспровергнут? Я изо всех сил старался быть максимально точным. – Fortun

ответ

1

Вам не нужен вложенный цикл. Вы пытаетесь использовать put все комбинации key s между 48 и 73 и value s между 65 и 90 на карте, но сохраняется только последнее значение для каждой клавиши, поскольку карта не позволяет дублировать ключи.

Один цикл будет делать то, что вам нужно:

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

Вероятно, вам следует объяснить оператор post increment в контексте вызова put() – Rich

+0

Большое спасибо Эрану. Это очень помогло мне и привело именно к результатам, которые я искал! :) – 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
Ключ: 50, Значение: 67
Ключ: 51, Значение: 68
Ключ: 52, Значение: 69
Ключ: 53, Значение: 70
Ключ: 54, стоимость: 71
.........

+0

Спасибо. Я бы поднял ваш ответ, но у меня еще недостаточно репутации:/ – 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