Сравнил с авторским решеним, оказалось, что там вообще нет проверок на на подобный результат "..//..", что как бы не показывает реальную разницу между путями. Даже в подсказке написано, что попробуй поменять местами пути. В моем решении проверка неплохо справляется и всегда показывает реальную разницу. Но при этом проверка ругается что я не использую сам метод relativize, и рекомендуют использовать дважды, хотя в авторском решении использование дважды не имеет никакой логики ведь исключение бросается если корни разные, а если корни одинаковые, то до смены местами путей дело никогда не дойдет. Если я не прав, помогите объяснить в чем же суть, пожалуйста.
package ua.javarush.task.pro.task15.task1514;
import java.nio.file.Path;
import java.util.Scanner;
/*
Усе відносне
*/
public class Solution {
/*
public static Path method (String str1, String str2) {
Path inappropriate = Path.of("..//..");
Path relative;
try {
relative = Path.of(str1).relativize(Path.of(str2));
if(relative.startsWith(inappropriate) || relative.endsWith(inappropriate)) {
relative = Path.of(str2).relativize(Path.of(str1));
}
} catch (IllegalArgumentException exception) {
return null;
}
return relative;
}
*/
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String str1 = scanner.nextLine();
String str2 = scanner.nextLine();
//напишіть тут ваш код
Path inappropriate = Path.of("..//..");
Path relative;
try {
relative = Path.of(str1).relativize(Path.of(str2));
if(relative.startsWith(inappropriate) || relative.endsWith(inappropriate)) {
relative = Path.of(str2).relativize(Path.of(str1));
}
} catch (IllegalArgumentException exception) {
relative = null;
}
if (relative != null)
System.out.println(relative);
}
}