Есть мое решение в прикрепленном коде. Да, я в курсе про компараторы и трисеты. Да я видел правильное решение. Но в данном случае я хотел сделать именно сам по-своему, без использования трисетов и компаратора, потому что мы их как бы еще не изучали, и я хочу освоить их нормально в разделе про коллекции, а не самому сидеть гуглить раньше времени. В целом моя логика решения целиком и полностью совпадает с логикой правильного решения.
Только я вместо сета использую файловый массив, а вместо компаратора - ручную сортировку. в IDE все работает корректно.
Поэтому хочу спросить советов - какие то есть влияющие на результат ошибки в моем коде? Или это валидатор просто принципиально хочет от меня использования сетов и компаратора?
package com.javarush.task.task18.task1825;
import java.io.*;
import java.util.Comparator;
import java.util.Set;
import java.util.TreeSet;
import java.io.InputStreamReader;
import java.util.*;
/*
Собираем файл
*/
public class Solution {
public static void main(String[] args) throws Exception {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
ArrayList<File> arr = new ArrayList<>();
String fileName;
while (true) {
fileName=reader.readLine();
if(fileName.equals("end")) break;
arr.add(new File(fileName));
}
File[] array = arr.toArray(new File[arr.size()]);
File temp=null;
for(int j=0;j<array.length-1;j++){
for(int i=0;i<array.length-1;i++){
int x=Integer.parseInt(array[i].toString().split(".part")[1]);
int y=Integer.parseInt(array[i+1].toString().split(".part")[1]);
if(x>y){
temp=array[i+1];
array[i+1]=array[i];
array[i]=temp;
}
}
}
FileOutputStream fos = new FileOutputStream(array[0].toString().split(".part")[0],true);
for(int i=0;i<array.length;i++){
FileInputStream fis = new FileInputStream(array[i]);
byte[] b = new byte[fis.available()];
while(fis.available()>0){
int bytesRead = fis.read(b);
fos.write(b, 0, bytesRead);
}
}
fos.close();
}
}