Я собираюсь предположить, что структуры данных являются обязательными и определены как часть назначения, и не давать никаких входных данных для использования альтернативных, если не указано иное.
Первый вопрос:
Да, вы можете, но не так, как вы думаете. Однажды объявленные массивы занимают статический объем памяти со статическим числом элементов. Следовательно, вы не можете «вставить» элемент в начало массива, который уже был объявлен и выделен. Это тип поведения динамической коллекции, такой как List.
Если у вас нет контроля над объявлением / распределением массива, тогда единственный выбор - скопировать содержимое массива в новый, включающий пустой индекс 0.
int[] array = { 0, 1, 2, 3 };
int newArray = new int[array.length + 1];
newArray[0] = 0;
for(int i = 1; i < newArray.length; i++)
{
newArray[i] = array[i - 1];
}
С другой стороны, если вы создаете этот начальный массив, просто увеличьте размер +1 и добавьте ноль в начале, проблема решена.
Второй вопрос:
Вопрос о том, должны ли массивы объявляться в "файле клиента" (что бы это ни было), действительно зависит от вас.