Мне кажется, что алгоритм действий будет немного другим. Так как в задаче говорится брать произвольно числа из одного списка и добавлять в другой до тех пор пока сумма не станет равной 1000.
Я думаю что надо сначала рандомно выбирать номер ячейки первого списка, затем положить содержимое этой ячейки в другой список. Затем брать следующее значение тоже рандомно и помещать так же во второй список. После этого сразу проверять сумму и если она меньше 1000, то снова брать и добавлять слагаемое из первого списка. А если сумма больше 1000, то брать другое слагаемое, пока сумма не станет равна 1000.
Придется немного заморочиться с циклами
Думаю как-то так будет это выглядеть
public static void main(String[] args) throws IOException {
List<Integer> numbers = new LinkedList<>();
numbers.add(100);
numbers.add(200);
numbers.add(500);
numbers.add(1000);
findSumList(numbers, numbers.size());
}
private static void findSumList(List<Integer> inputData, int rangeSize) {
List<Integer> outData = new LinkedList<>();
int sum = 0;
while (sum != 1000){
final Random random = new Random();
outData.add(inputData.get(random.nextInt(rangeSize)));
sum = 0;
for (int cell : outData){
sum += cell;
}
if (sum > 1000) {
outData.remove(outData.size() - 1);
}
}
System.out.println(Arrays.toString(new List[]{outData}));
}
}