Как исправить цикл через Hashmap <int <arraylist>>, назначая больше значений, чем ожидалось - PullRequest
0 голосов
/ 15 января 2019

заранее благодарю за уделенное время! Я работаю над создателем Fruchterman Reingold Graph и застрял в том, что кажется очень простой проблемой. Короче говоря, я хочу инициализировать Hashmap, который содержит ключ Integer, то есть существующее, вершина, в которой я нахожусь, и список целых чисел, которые являются позицией x и позицией y. Следующий код, однако, размещает 8 вместо 2 значений позиции вместо 2 на клавишу. Любая помощь или совет, с благодарностью!

package testing.ground;

import java.util.*;


public class TestingGround {


public static void main(String[] args) {


    Random ranx = new Random();
    Random rany = new Random();
    HashMap<Integer,List<Integer>> positions=new HashMap<Integer,List<Integer>>();
    List<Integer> temp = new ArrayList<Integer>();

    int n = 3;
    int area = 1280*720;
    int vposx=0;
    int vposy=0;


    double k = 0.5*(Math.sqrt(area/n));
    for (int i=0; i<=n; i++){
        vposx=ranx.nextInt(1280)+1;
        vposy=rany.nextInt(720)+1;
        temp.add(vposx);
        temp.add(vposy);
        positions.put(i,temp);

    }
        System.out.println(positions);
}
}

Результаты следующие

{0 = [1063, 102, 41, 391, 614, 418, 751, 599], 1 = [1063, 102, 41, 391, 614, 418, 751, 599], 2 = [1063, 102 , 41, 391, 614, 418, 751, 599], 3 = [1063, 102, 41, 391, 614, 418, 751, 599]}

Ожидаемые будут просто 0=[randomx,randomy], 2=[randomx,randomy] and so on.

Ответы [ 2 ]

0 голосов
/ 15 января 2019

импорт java.util. *;

открытый класс SomeTestingClass {

public static void main (аргументы String []) {

Random ranx = new Random();
Random rany = new Random();
HashMap<Integer,List<Integer>> positions=new HashMap<Integer,List<Integer>>();
List<Integer> temp = null;

int n = 3;
int area = 1280*720;
int vposx=0;
int vposy=0;


double k = 0.5*(Math.sqrt(area/n));
for (int i=0; i<=n; i++){
    vposx=ranx.nextInt(1280)+1;
    vposy=rany.nextInt(720)+1;
    **temp=new ArrayList<Integer>();** // this will solve your problem
    temp.add(vposx);
    temp.add(vposy);
    positions.put(i,temp);

}
    System.out.println(positions);

} }

0 голосов
/ 15 января 2019

Вы должны создать новый ArrayList для каждого значения вашего Map:

for (int i=0; i<=n; i++){
    List<Integer> temp = new ArrayList<>();
    vposx=ranx.nextInt(1280)+1;
    vposy=rany.nextInt(720)+1;
    temp.add(vposx);
    temp.add(vposy);
    positions.put(i,temp);
}

В противном случае вы связываете все ключи в вашем Map с одинаковым значением List.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...