Вы правы, говоря, что ваша проблема связана с объектами Combo, ссылающимися на один и тот же массив. Чтобы это исправить, просто выделите новый массив перед каждым созданным вами комбинированным объектом. Таким образом, в каждом внутреннем цикле for оператора switch ставьте эту строку первой:
temp = new int[comboSize];
Это должно решить твою проблему. (В качестве альтернативы вы можете использовать конструктор по умолчанию Combo, просто создав новый массив и скопировав массив, который был ему передан, в новый.)
Итак, есть ваша проблема, но вот несколько советов:
Первый: «Двухэтапный» подход к решению этой проблемы может быть объединен в один, если вы просто ссылаетесь на массив values [] во внутреннем цикле for оператора switch. Например, в первом цикле for, в случае 2, замените соответствующие строки на:
temp[0] = values[i];
temp[1] = values[j];
затем нажмите комбо. Это избавляет от необходимости делать «второй проход», переходящий от псевдо-комбинаций к реальным, и устраняет необходимость в третьем цикле aCombos, который, как я предполагаю, вы используете, чтобы просто вернуться к исходному порядку комбинаций ( так как второй проход проходит в обратном порядке.)
Второе: Вы можете устранить необходимость использования оператора switch / case и повторяющегося кода, используя рекурсивную функцию. Это выходит за рамки вопроса, но оно также позволит вам поддерживать комбинации любого количества значений, а не только чисел, которые вы жестко кодируете (в настоящее время их число равно четырем).