Разделить ArrayList на несколько ArrayList в зависимости от ввода пользователя

1

У меня есть эта программа:

public static void main(String[] args){
    System.out.println("Enter number of nodes");
    Scanner sc = new Scanner(System.in);
    int n = sc.nextInt();
    for(int i=0;i<=n;i++)
    {
        nodes.add(i);
    }

    System.out.println(nodes);
    System.out.println("How many subnetworks you want? Enter Small(10), Med(30), Large(50)");
    small = sc.nextInt();
    med = sc.nextInt();
    large = sc.nextInt();
    System.out.println("Small = " + small + "med" + med + "large" + large);

Теперь, в зависимости от значения малой, средней и большой и рассматривая кратность каждого из этих целых чисел, я хочу разбить ArrayList на разные массивы или массивы. Например, small = 100, med = 50, large = 10 должны разделить главный arraylist на 100 маленьких arraylists каждого из 10, 50 медиаарюристов каждый размером 30 и 10 больших arraylists каждый из размера 50. После раскола я хочу присваивать некоторые свойства элементам в подрешетках. И я не уверен, должен ли он быть arraylist или массив или что-то еще.

Теги:
arraylist

2 ответа

3
Лучший ответ

Вы можете использовать функцию списка расщепления.

private static List<List<Integer>> splitAndReturn(List<Integer> numbers,
        int size) {
    List<List<Integer>> smallList = new ArrayList<List<Integer>>();
    int i = 0;
    while (i + size < numbers.size()) {
        smallList.add(numbers.subList(i, i + size));
        i = i + size;
    }
    smallList.add(numbers.subList(i, numbers.size()));
    return smallList;
}

Функция вернет массивList массивов с каждым размером size. Поэтому, если вам нужно 100 массивов с размером 10, тогда

splitAndReturn(yourList, 10).subList(0, 100);

вы получите список массивов.

  • 0
    Могу ли я узнать, что на самом деле делает переменная count? А также для списка размера медика. Где каждый список имеет размер 30, и я хочу 40 таких списков, тогда это будет похоже на splitAndReturn (node, 30) .subList (0,40)?
  • 0
    Я получаю IndexOutofBoundsException в строке List <Integer> small = numbers.subList (i, numbers.size () + size);
Показать ещё 8 комментариев
0

Ну, простую вещь, которую нужно сделать, - это прокрутить список и разделить их соответственно. Учитывая ваш пример,

small = 100, med = 50, large = 10

сначала проверьте, имеет ли список достаточное значение

if (list.size() >= ((small*10)+(med*30)+(large*50))){
    for (int i=0;i<small;i++){
        for(int j=0;j<10;j++){
            //copy array value
        }
    }    
    // do the same for med and large.
}
  • 0
    Извините, но я не понял, что вы подразумеваете под значением массива копии?
  • 0
    создать список для текущего small вне внутреннего цикла (скажем, smallList ) и назначить smallList.add(list.get(j))
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню