kiomaru

пикабушник
644 рейтинг 0 подписчиков 527 комментариев 3 поста 0 в горячем
-5

Задачка с Hyperskill

Всем доброго времени суток.

Решаю задачки в проекте Encryption - Decryption на Hyperskill.

Дошел до stage 5, финальное задание уровня.


https://hyperskill.org/projects/46/stages/249/implement


Столкнулся с проблемой, Wrong answer in test #1.

Хотя в IDE программа работает нормально, выводит сообщение об ошибке, если наступает исключение.

Код аппликухи:


package encryptdecrypt;

import java.io.File;

import java.io.FileNotFoundException;

import java.io.FileWriter;

import java.io.IOException;

import java.util.Scanner;


public class Main {


static String fileMessage(String pathOpenFile) throws FileNotFoundException {

try {

String outputMessage = "";

File file = new File(pathOpenFile);

Scanner scan = new Scanner(file, "Cp1251");

while (scan.hasNext()) {

outputMessage = outputMessage + scan.nextLine() + " ";

}

scan.close();

return outputMessage;

} catch (FileNotFoundException e) {

return null;

}

}


static void writeToFile(String pathNewFile, String message) throws IOException {

File file = new File(pathNewFile);

FileWriter fileWriter = new FileWriter(file);

fileWriter.write(message);

fileWriter.close();

}


//Дешифровка

static String dec(String inputMessage, int selectedKey) {

try {

char[] textToArray = inputMessage.toCharArray(); //Массив символов до преобразования

char[] decArray = new char[inputMessage.length()]; //Массив символов после преобразования

int[] intNumberOfChars = new int[inputMessage.length()]; //Массив с кодами символов до преобразования

int[] newIntNumberOfChars = new int[inputMessage.length()]; //Массив с кодами символов после преобразования

String newMessage;

//Заполнение массива значениями символов изначального сообщения

for (int i = 0; i < inputMessage.length(); i++) {

intNumberOfChars[i] = textToArray[i];

}

//Заполняем массив кодами со сдвигом

for (int i = 0; i < inputMessage.length(); i++) {

newIntNumberOfChars[i] = intNumberOfChars[i] - selectedKey;

}

//Преобразуем новый массив кодов в символьный массив

for (int i = 0; i < inputMessage.length(); i++) {

decArray[i] = (char) newIntNumberOfChars[i];

}

newMessage = String.valueOf(decArray);

return newMessage;

} catch (NullPointerException e) {

return null;

}

}


//Шифрование

static String enc(String inputMessage, int selectedKey) {

try {

char[] textToArray = inputMessage.toCharArray(); //Массив символов до преобразования

char[] decArray = new char[inputMessage.length()]; //Массив символов после преобразования

int[] intNumberOfChars = new int[inputMessage.length()]; //Массив с кодами символов до преобразования

int[] newIntNumberOfChars = new int[inputMessage.length()]; //Массив с кодами символов после преобразования

String newMessage;

//Заполнение массива значениями символов изначального сообщения

for (int i = 0; i < inputMessage.length(); i++) {

intNumberOfChars[i] = textToArray[i];

}

//Заполняем массив кодами со сдвигом

for (int i = 0; i < inputMessage.length(); i++) {

newIntNumberOfChars[i] = intNumberOfChars[i] + selectedKey;

}

//Преобразуем новый массив кодов в символьный массив

for (int i = 0; i < inputMessage.length(); i++) {

decArray[i] = (char) newIntNumberOfChars[i];

}

newMessage = String.valueOf(decArray);

return newMessage;

} catch (NullPointerException e) {

return null;

}

}


public static void main(String[] args) throws IOException {

int counter = 0;

int coutner2 = 0;

final String optionMode = "-mode";

final String optionData = "-data";

final String optionIn = "-in";

final String optionOut = "-out";

final String optionKey = "-key";

String finalMessage = "";

String selectedMode = "enc";

String pathOpenFile = "";

String pathNewFile = "";

String inputMessage = "";

int selectedKey = 0;


if (args.length == 0) {

System.out.println("Error");

System.exit(0);

}


//Проверяем введенные опции и присваиваем их

for (int i = 0; i < args.length; i += 2) {

if (args[i].equals(optionMode)) {

selectedMode = args[i + 1];

}

if (args[i].equals(optionData)) {

inputMessage = args[i + 1];

counter = 1;

}

if (args[i].equals(optionIn)) {

pathOpenFile = args[i + 1];

counter+=10;

}

if (args[i].equals(optionOut)) {

pathNewFile = args[i + 1];

coutner2=+15;

}

if (args[i].equals(optionKey)) {

selectedKey = Integer.parseInt(args[i + 1]);

}

}


//Проверяем наличие полей ввода. Если есть ввод с консоли, читает с консоли, игнорируя файл.

if (counter != 1 && counter != 11) {

inputMessage = fileMessage(pathOpenFile);

}


//Проверяем выбранный мод.

if (selectedMode.equals("enc")) {

finalMessage = enc(inputMessage, selectedKey);

}

if (selectedMode.equals("dec")) {

finalMessage = dec(inputMessage, selectedKey);

}


if (coutner2 == 15) {

if (finalMessage == null){

System.out.println("Error");

} else {

writeToFile(pathNewFile, finalMessage);

}

} else {

if (finalMessage == null){

System.out.println("Error");

} else {

System.out.println(finalMessage);

}

}

}

}



Можете подсказать, в какую сторону копать?

Показать полностью
7

Взыскание с карты после снятия ареста

Добрый день, пикабушники.

Возникла такая история.

Имеется доля в квартире, сам там уже давно не живу.

Остальные собственники допустили задолженность по ЖКХ.

Появилась запись на ФССП, ошибка в месте рождения, но в остальном все вроде верно.

Сбербанк наложил арест на карту и взыскание.

Связались с собственниками, они погасили все это дело, разбирались с приставом.

Сегодня (арест снимался с карты!) внезапно арест снова появился и списали все в ноль на карте.

Лига юристов, прошу о помощи - какой порядок действий в данном случае?

Без рейтинга, спасибо!

-2

Помогите найти книгу.

Привет пикабушники.
когда то читал книгу российского фантаста, из основного помню только про то, как у главного героя (и не только) была возможность прятать предметы "на холод".
Эдакое иное измерение, куда силой мысли и руки могли прятать предметы и доставать по желанию.
Заранее спасибо)

Отличная работа, все прочитано!