Вам необходимо инициализировать массив перед использованием. Вы знаете об этом, я полагаю.
Если вы не знаете размер ваших данных, то есть: вы не знаете, какой будет размер массива, тогда вам нужно будет использовать ArrayList<T>
, который использует массив внутри и управляет перераспределением размера массива за вас.
Если вам нужно использовать массив, вам придется поддерживать размер массива самостоятельно. По мере роста массива вы можете исчерпать корзины, если не настроите достаточно места для данных, например: IndexOutOfBoundsException и т. д. Затем вам нужно создать новый массив, скопировать содержимое текущего массива и затем продолжить. Все это сделано для вас в ArrayList, в этом выгода. Экономит ваше время и реализацию. Более того, существует понятие, называемое коэффициентом загрузки, которое используется для расширения массива.
Коэффициент загрузки массива обычно составляет:
(j * 3) / 2 + 1 // j для текущей длины массива.
К вашему сведению: копирование массива становится очень дорогим, если ваши данные становятся очень большими.
int numberOfElements = inputFromFile(args[0], myArray);
int [] myArray = new int[1000];
Глядя на ваш код, ваш порядок утверждений неверен и должен быть:
int [] myArray = new int[1000];
int numberOfElements = inputFromFile(args[0], myArray);
вы передаете myArray методу перед его объявлением и инициализацией.
ArrayList<Integer> s = new ArrayList<Integer>();
int numberOfElements = inputFromFile(args[0], myArray);
Это было бы лучше. Затем вам нужно изменить сигнатуру вашего метода следующим образом:
public void inputFromFile(String fileName, ArrayList<Integer> collection){
// your impl.
}