Witam serdecznie.
Postanowiłem sobie rozwiązać kilka zadanek na SPOJ'u, no i mam problem z szyfrem Cezara. Sam algorytm jest okej, ale cały czas podaje mi błąd o treści: "Błąd wykonania (NZEC)". Wiem jedynie, że problem leży w ilości danych wejściowych, ale jak mam to zrobić inaczej? Mam stworzyć kolekcję typu List, aby zapisywać nieokreśloną liczbę znaków do 200, w tym entery, czy co? Albo jak wywoływać funkcję szyfrującą jeśli w text wchodzi enter?
Link do zadania - https://pl.spoj.com/problems/JSZYCER/
A oto mój kod, przy którym już próbowałem zrobić znaną sztuczkę while (true)..., ale mimo to i tak nie działało
import java.util.Scanner;
public class Main{
private static Scanner scanner = new Scanner(System.in);
private static char[] alphabet = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z' };
private static StringBuilder builder = new StringBuilder();
static final int LETTERS_IN_ALPHABET = 26;
public static void main(String[] args) {
while (true) {
String simpleText = scanner.next();
String encryptedText = encryptText(simpleText);
System.out.println(encryptedText);
}
}
public static String encryptText(String simpleText) {
char[] textAsArray = simpleText.toCharArray();
char encryptedLetter;
String encryptedText;
for (char letter : textAsArray) {
if (letter == ' ') {
builder.append(' ');
continue;
}
int positionOfChar = 0;
for (int i = 0; i < LETTERS_IN_ALPHABET; i++) {
if (letter == alphabet[i]) {
positionOfChar = i;
break;
}
}
if (positionOfChar < LETTERS_IN_ALPHABET - 4)
encryptedLetter = alphabet[positionOfChar + 3];
else {
positionOfChar += 3;
positionOfChar -= LETTERS_IN_ALPHABET;
encryptedLetter = alphabet[positionOfChar];
}
builder.append(encryptedLetter);
}
encryptedText = builder.toString();
return encryptedText;
}
}
Pozdrawiam