2014-07-30 3 views
0

У меня есть следующий код:Spliting ArrayList в 2D ArrayList

for (int i = 0; i < costs.size(); i++){ 
     System.out.println(twoDArrayList); 
     for (int j = 0; j < cities.size(); j++){ 
      if (i==0 || i%cities.size() != 0){ 
       twoDArrayList.get(j).add(costs.get(i)); 
      } 
     } 
    } 

Предполагается разбить ArrayList (затраты) и положить значения в 2D ArrayList (twoDArrayList). Это почти работает, за исключением того, что код просто помещает одни и те же значения в каждый массив ArrayList в twoDArrayList. Вот результат:

begin execution 
[Seattle, NewOrleans, LosAngeles, Tucson, Chicago, Miami, Omaha] 
[[], [], [], [], [], [], []] 
[[0], [0], [0], [0], [0], [0], [0]] 
[[0, 2706], [0, 2706], [0, 2706], [0, 2706], [0, 2706], [0, 2706], [0, 2706]] 
[[0, 2706, 1136], [0, 2706, 1136], [0, 2706, 1136], [0, 2706, 1136], [0, 2706, 1136],  [0, 2706, 1136], [0, 2706, 1136]] 
...etc. 

мне нужно двигаться так, что ArrayList является:

[0][2706][1136][etc...] 

Спасибо!

Вот полный код:

private static ArrayList<String> cities; 
private static ArrayList<Integer> costs; 
private static ArrayList<ArrayList<Integer>> twoDArrayList; 


public TSP(Scanner inFile) { 
    cities = new ArrayList<String>(); 
    costs = new ArrayList<Integer>(); 
    String newCities; 
    newCities = (inFile.nextLine()); 
    String[] stringArray = newCities.split(" "); 
    for (int i = 0; i < stringArray.length; i++){ 
     cities.add(stringArray[i]); 
    } 
    System.out.println(cities); 


    twoDArrayList = new ArrayList<ArrayList<Integer>>(); 



    for (int i = 0; i < cities.size(); i++){ 
     twoDArrayList.add(new ArrayList<Integer>()); 
    } 


    while (inFile.hasNextInt()){ 
     int newCost = inFile.nextInt(); 
     costs.add(newCost); 
    } 

    for (int i = 0; i < costs.size(); i++){ 
     System.out.println(twoDArrayList); 
     for (int j = 0; j < cities.size(); j++){ 
      if (i==0 || i%cities.size() != 0){ 
       twoDArrayList.get(j).add(costs.get(i)); 
      } 
     } 
    } 

    System.out.println(twoDArrayList.get(0).get(0)); 
    System.out.println(twoDArrayList.get(0).get(1)); 
    System.out.println(twoDArrayList.get(0).get(2)); 
    System.out.println(twoDArrayList.get(2).get(0)); 
    System.out.println(twoDArrayList.get(2).get(1)); 
    System.out.println(twoDArrayList.get(2).get(2)); 

} 
} 
+0

Я действительно не понимаю, что находится в первоначальном arraylist, и то, что должно быть в 2D arraylist, зная типы (инициализация списков), было бы неплохо. – EpicPandaForce

+0

Я отредактировал оригинальный вопрос. –

+1

Просьба показать следующее: оригинальное содержимое архиватора; Ожидаемый результат. –

ответ

-1

Хотите что-то вроде этого?

int j = 0; 
    for (int i = 0; i < costs.size(); ++i){ 
      System.out.println(twoDArrayList); 
       if ((i+1)%cities.size() != 0 && j < cities.size()){ 
        twoDArrayList.get(j).add(costs.get(i)); 
       } 
       else { 
        ++j; 
       } 
      } 
     } 

или, может быть, это то, что вы хотите

int j = 0; 
    int count = 1; 
    for (int i = 0; i < costs.size(); ++i){ 
     if (count % cities.size() != 0 && j < cities.size()){ 
      twoDArrayList.get(j).add(costs.get(i)); 
      ++count; 
     } 
     else { 
      count = 2; 
      ++j; 
      if (j < cities.size()) twoDArrayList.get(j).add(costs.get(i)); 
     } 
    } 

    System.out.println(twoDArrayList); 
+0

Это было умно, я не знал, что вы можете поставить эту проверку на размер внутри оператора if! Это почти работает, мне просто нужно выяснить, как получить остальные ценности. Я буду играть с ним, спасибо! –

+0

Вещи разваливаются, когда я получаю индекс 1. Я получаю исключение IndexOutOfBoundsException. –

+0

Я исправил его для вас. Проверьте обновленный ответ. –

0

Вы хотите 2 или более столбцов в одно значение?

пример

<cities> <costs> <distance> 
Seattle  58   594 
NewOrleans 74   434 
LosAngeles 42   43 
Tucson  43   456 
Chicago  20   248 
Miami  90   109 
Omaha  45   85 

Все вышеизложенное в 2d массив? Если так.

ArrayList twoDArrayList= new ArrayList<List>(); 
twoDArrayList.add(new ArrayList<String>()); //Cities 
twoDArrayList.add(new ArrayList<Integer>()); //Costs 
twoDArrayList.add(new ArrayList<Integer>()); //Distance 

Чтобы добавить значение и нужно сделать это

list.get(0).add("Enter a place"); //Adding a location 
list.get(1).add(50);    //Adding a cost for the location you just added 
list.get(2).add(534);    //Adding distance for the location you just added 

Чтобы получить значения

list.get(0).get(i); //gets location at index i 
list.get(1).get(i); //gets cost at index i 
list.get(2).get(i); //gets cost at index i 

Вам нужно больше информации о том, что ваш вклад.

Смежные вопросы