2017-01-10 4 views
0

Мне нужно смоделировать заразительную болезнь, распространяющуюся там, где мир из NxN стран. Первоначально в мире будут люди P, а затем мы должны распределять людей равномерно в каждой стране.NxN сетка со странами и каждой страной имеет некоторую популяцию

Проблема, с которой я столкнулась, заключается в том, как я могу назначить несколько людей в каждой стране?

Если у меня есть массив, такие как

String[][] world = new String[2][2]; 

У меня есть 4 страны, и теперь я могу показать их в виде сетки, используя для петель.

Теперь мир [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| 
+0

Вы определили метод 'toString' на' Human', а затем использовали для циклов, как описано выше, с вашей матрицей 'String'? –

+0

Да, у меня есть toString в человеческом классе, и в настоящее время он возвращает «Человек». Список в методе списка хорош, но проблема, с которой я столкнулся, заключается в том, как напечатать это в формате gird? – indexOutOfBounds

+0

Можете ли вы представить свой ожидаемый результат, на который вы ссылаетесь в примере матрицы 'String'? Также будет полезен код, который вы использовали в этом случае. –

ответ

1

Это будет цикл через 3D ArrayList из Целые и распечатать содержимое всех 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(); 
    } 
} 

Так я ahve две функции, одна для заполнения 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,| 

Каждая строка является строкой в ​​сетке. Теперь вы можете добавить его, возможно добавив функциональность, чтобы отформатировать его и многое другое. Удачи!

+0

Спасибо большое :) – indexOutOfBounds