Расскажите как это работает? package com.javarush.task.task18.task1826; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; /* Шифровка */ Программа запускается с одним из следующих наборов параметров: -e fileName fileOutputName -d fileName fileOutputName где: fileName - имя файла, который необходимо зашифровать/расшифровать. fileOutputName - имя файла, куда необходимо записать результат шифрования/дешифрования. -e - ключ указывает, что необходимо зашифровать данные. -d - ключ указывает, что необходимо расшифровать данные. Требования: 1. Считывать с консоли ничего не нужно. 2. Создай поток для чтения из файла, который приходит вторым параметром ([fileName]). 3. Создай поток для записи в файл, который приходит третьим параметром ([fileOutputName]). 4. В режиме "-e" программа должна зашифровать [fileName] и записать в [fileOutputName]. 5. В режиме "-d" программа должна расшифровать [fileName] и записать в [fileOutputName]. 6. Созданные для файлов потоки должны быть закрыты. */ public class Solution { // Как вообще это работает? // Вопрос: Каким образом берутся элементы массива args если длина этого массива равна нулю public static void main(String[] args) throws IOException { String fileName = args[1]; String fileOutputName = args[2]; FileInputStream fileInputStream = new FileInputStream(fileName); FileOutputStream fileOutputStream = new FileOutputStream(fileOutputName); byte bytes; // Вопрос: Здесь проходят сравнение одного из элементов массива args с заданной (формулой). // Каким образом если нулевой элемент массива args равен нулю if (args[0].equals("-e")) { while (fileInputStream.available() > 0) { bytes = (byte) (fileInputStream.read()); fileOutputStream.write(bytes+1); fileOutputStream.flush(); } } if (args[0].equals("-d")) { while (fileInputStream.available() > 0) { bytes = (byte) (fileInputStream.read()); fileOutputStream.write(bytes-1); fileOutputStream.flush(); } } fileInputStream.close(); fileOutputStream.close(); } } Задача решена правильно валидатор ее принял.