Заполнение динамического массива (Java)
Как правильно заполнить динамический массив данными. Имею следующий код:
public static void main(String[] args) {
int Weight=0;
int Count=0;
// we take the same instance of the problem displayed in the image
System.out.println("Введите грузоподъемность рюкзака и нажмите Enter: ");
Scanner scan = new Scanner(System.in);
Weight = scan.nextInt();
System.out.println("Введите количество вещей и нажмите Enter: ");
Count = scan.nextInt();
for (int i=1; i<=Count;i++){
System.out.println("Введите через запятую ценность и вес "+i+"-ой вещи и нажмите Enter: ");
String somebody = scan.nextLine();
String[] somebodyList = somebody.split(",");
Item[] items = new Item[Integer.parseInt(i+"-я вещь"),toString(somebodyList[0]),toString(somebodyList[1])];
}
/*Item[] items = {new Item("Elt1", 4, 12),
new Item("Elt2", 2, 1),
new Item("Elt3", 2, 2),
new Item("Elt4", 1, 1),
new Item("Elt5", 10, 4)};*/
Main knapsack = new Main(items, Weight);
//Main knapsack = new Main(items, 15);
knapsack.display();
Solution solution = knapsack.solve();
solution.display();
}
Когда пытаюсь в цикле организовать заполнение, то сталкиваюсь с ошибками. Что не так. P.S. чуть ниже закомментированный код с заранее известными данными.
Ответы (2 шт):
Вам необходимо разобраться в динамических массивах.
Например, int[] array = new int[10]; - это статический массив, потому что в нём необходимо задать размер сразу же. В вашем случае происходит переинициализация массива, т.е. сначала создаёте массив, а при новой итерации в цикле for вы опять заново создаёте.
private List<Integer> x = new ArrayList(); - это уже является динамическим, потому что размерность не задаём, он будет расширяться по мере заполнения данными.
Нашел решение, выглядит так:
public static void main(String[] args) {
int Weight=0;
int Count=0;
System.out.println("Введите грузоподъемность рюкзака и нажмите Enter: ");
Scanner scan = new Scanner(System.in);
Weight = scan.nextInt();
System.out.println("Введите количество вещей и нажмите Enter: ");
Count = scan.nextInt();
ArrayList<String> arrayList = new ArrayList<>();
System.out.println("Вводим параметры вещей");
for (int i=1; i<=Count;i++){
System.out.println("Введите через запятую ценность и вес "+i+"-ой вещи и нажмите Enter: ");
arrayList.add(scan.next());
}
Item[] items = new Item[Count];
for (int i=0;i<Count;i++){
String s = arrayList.get(i);
String[] wordlist = s.split(",");
items[i] = new Item("Вещь "+(i+1), Integer. parseInt(wordlist[0]), Integer. parseInt(wordlist[1]));
}
Main knapsack = new Main(items, Weight);
knapsack.display();
Solution solution = knapsack.solve();
solution.display();
}