NxN网格与国家和每个国家/地区有一些人口

时间:2017-01-10 20:35:04

标签: java arrays arraylist grid

我必须模拟世界属于NxN国家的传染病蔓延。最初世界上将有P人,然后我们必须随机地将人员分配到每个国家。

我遇到的问题是如何为每个国家分配一些人?

如果我有一个像

这样的数组
String[][] world = new String[2][2];

我现在有4个国家/地区,我可以将它们显示为使用for循环的网格。

现在,一个国家的世界[0] [0]应该指向一个包含人物的列表。

我在列表中尝试了列表

ArrayList<ArrayList<human>> world2 = new ArrayList<ArrayList<human>>();
ArrayList<human> country1 = new ArrayList<human>();


for(int i=0; i<5; i++){
    human h = new human();
    country1.add(i,h);
}

world2.add(country1);

ArrayList<human> country2 = new ArrayList<human>();
human h = new human();
country2.add(h);
world2.add(country2);

for (int i=0; i<world2.size(); i++){
    System.out.println(world2.get(i));
}

但我如何以网格格式打印?

EDIT1:

 String[][] world = new String[2][2];
  for (int row = 0; row < world.length; row++) {
            System.out.print("|");
           for (int col = 0; col < world.length; col++) {
                System.out.print(world[row][col] + "| ");
            }
            System.out.println();
        }

输出:

|null| null| 
|null| null| 

1 个答案:

答案 0 :(得分:1)

这将遍历Integers的3D arraylist并打印世界网格中每个[row] [col]的所有Integer的内容。所有你需要做的就是将你的Human对象补充到我有Integer的任何地方。

public ArrayList<ArrayList<ArrayList<Integer>>> create3D()
{
    ArrayList<ArrayList<ArrayList<Integer>>> world = new ArrayList<ArrayList<ArrayList<Integer>>>();
    for (int row = 0; row < 3; row++)
    {
        world.add(new ArrayList<ArrayList<Integer>>());
        for (int col = 0; col < 3; col++) 
        {
            world.get(row).add(new ArrayList<Integer>());
            Random rand = new Random();
            int randomNum = rand.nextInt((20 - 1) + 1) + 1;
            for(int humanNumber = 0; humanNumber < randomNum; humanNumber++)
                world.get(row).get(col).add(humanNumber);
        }
        System.out.println();
    }

    return world;
}

public void printHumanGrid(ArrayList<ArrayList<ArrayList<Integer>>> world)
{
    for (int row = 0; row < world.size(); row++)
    {
        for (int col = 0; col < world.get(row).size(); col++) 
        {
            System.out.print("|");
            for(int humanNumber = 0; humanNumber < world.get(row).get(col).size(); humanNumber++)
                System.out.print(world.get(row).get(col).get(humanNumber) + ",");

            System.out.print("|");
        }
        System.out.println();
    }
}

所以我有两个功能,一个用于填充3D arraylist,另一个用于打印出来。运行以下

printHumanGrid(create3D());

输出:

|0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,||0,1,2,3,4,5,6,7,8,9,||0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,|
|0,1,2,3,4,5,6,7,8,9,||0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,||0,1,2,3,|
|0,1,2,3,4,5,6,7,8,9,||0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,||0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,|

每一行都是网格中的一行。您现在可以添加它,也许添加功能来格式化它和诸如此类的东西。祝你好运!