Задачка с 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);
}
}
}
}
Можете подсказать, в какую сторону копать?