Здравствуйте может кто подсказать почему не проходит тестирование?

 package com.javarush.test.level18.lesson10.bonus01;

/* Шифровка
Придумать механизм шифровки/дешифровки

Программа запускается с одним из следующих наборов параметров:
-e fileName fileOutputName
-d fileName fileOutputName
где
fileName - имя файла, который необходимо зашифровать/расшифровать
fileOutputName - имя файла, куда необходимо записать результат шифрования/дешифрования
-e - ключ указывает, что необходимо зашифровать данные
-d - ключ указывает, что необходимо расшифровать данные
*/

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;

public class Solution {
    public static void main(String[] args) throws IOException {
        String param = args[0];
        BufferedReader Fr = new BufferedReader (new FileReader(param.substring(3, param.lastIndexOf(' '))));
        PrintWriter Pw = new PrintWriter(param.substring(param.lastIndexOf(' ') + 1));
        StringBuilder source = new StringBuilder();

        while (Fr.ready()) {
            source.append(Fr.readLine());
            source.append('\n');
        }
        Fr.close();
        source.deleteCharAt(source.length() - 1);

        ArrayList<String> arr = new ArrayList<>(); //Жуткий костыль чтобы записать в файл построчно
        String[] tmp;
        if (param.startsWith("-e")) {
            tmp = Code(source).split("[\n]");
            for (String s : tmp) {
                arr.add(s);
            }

            for (int i = 0; i < arr.size() - 1; i++) {
                Pw.println(arr.get(i));
            }
            Pw.print(arr.get(arr.size()-1));
            Pw.flush();
        } else {
            tmp = Decode(source).split("[\n]");
            for (String s : tmp) {
                arr.add(s);
            }

            for (int i = 0; i < arr.size() - 1; i++) {
                Pw.println(arr.get(i));
            }
            Pw.print(arr.get(arr.size()-1));
            Pw.flush();
        }
        Pw.close();
    }

    private static String Code(StringBuilder source) { //Механизм шифровки - делим всю строку на два массива символов
        int count = source.length()/2;                 //а затем считываем по очереди первый, к нему добавляем второй
        int div = source.length() % 2;                 //после чего делаем реверс всей строки.
        char[] firstArray = new char[count];
        char[] secondArray = new char[count];
        StringBuilder result = new StringBuilder();
        int i = 0;
        int j = 0;
        for (; i < source.length()/2; i++) {
            firstArray[i] = source.charAt(j);
            j++;
            secondArray[i] = source.charAt(j);
            j++;
        }
        result.append(firstArray);
        result.append(secondArray);
        if (div == 1) { result.append(source.charAt(j)); }
        return result.reverse().toString();
    }

    private static String Decode(StringBuilder source) { //Механизм дешифровки обратный шифровке.
        source.reverse();
        int div = source.length() % 2;
        StringBuilder result = new StringBuilder();
        int i = 0;
        int j = 0;
        for (; i < source.length()/2; i++) {
            result.append(source.substring(0,source.length()/2).charAt(j));
            result.append(source.substring(source.length()/2, source.length()).charAt(j));
            j++;
        }
        if (div == 1) { result.append(source.charAt(source.length() - 1)); }
        return result.toString();
    }
}

задан 11 Янв, 14:46

AlexeyGW's gravatar image

AlexeyGW
486
одобрено: 28%


В файле не обязательно текст, это может быть любой файл - видео, картинка, просто набор ничего не значащих байт. Вы не можете полагаться на корректную работу BufferedReader, пользуйтесь FileInputStream.

Для алгоритма шифрования должно выполняться два условия:
1. Для любого непустого файла зашифрованный файл должен отличаться от входного.
2. Файл после шифровки и дешифровки должен абсолютно совпадать с оригиналом.

ссылка

опубликован 11 Янв, 21:44

newuser01's gravatar image

newuser01
1.0k6
одобрено: 46%

изменено 11 Янв, 21:45

Хорошо. Спасибо за обьяснение.

(11 Янв, 21:52) AlexeyGW

Как то у вас все мудрено вышло...почему сразу не записывать строки из буфера в лист? зачем костыль из сначала строки, а потом разбивания? И как отреагирует на пустой файл? Шифрование тоже сложное. Вы тестировали? он корректно шифруетдешифрует? Для теста, попробуйте не мудрить и просто увеличить код каждого символа на 1, а в дешифровке наоборот - самый простой тип шифрования и много кода не потребует.

ссылка

опубликован 11 Янв, 15:34

Lezenford's gravatar image

Lezenford
2715
одобрено: 34%

изменено 11 Янв, 15:35

Ваш ответ
включить просмотр

Следить за вопросом

По Email:

После авторизации вы сможете подписаться на любые обновления здесь

Основы Markdown

  • *italic* or _italic_
  • **bold** or __bold__
  • ссылка:[текст](http://url.com/ "заголовок")
  • изображение?![alt текст](/path/img.jpg "заголовок")
  • нумерованный список: 1. Foo 2. Bar
  • Для того чтобы добавить разрыв строки просто добавьте два пробела.
  • основные HTML тэги, также поддерживаются

Тэги:

×763
×494
×246
×5

Задан: 11 Янв, 14:46

Просмотров: 153 раз

Отредактирован: 11 Янв, 21:52