• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Szyfr Cezara - błąd wykonania (NZEC)

Cloud VPS
0 głosów
742 wizyt
pytanie zadane 17 września 2019 w SPOJ przez coderCpp93 Gaduła (4,200 p.)

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

1 odpowiedź

0 głosów
odpowiedź 17 września 2019 przez butelka.wody Początkujący (380 p.)
Musisz uwzględnić znak nowej linii te twoje entery :) żeby tego nie szyfrował tylko dodawał do kolejki znaków że jest nowa linia. bo na razie to bierze wszystko jako jeden ciąg znakow u ciebie

Podobne pytania

0 głosów
2 odpowiedzi 1,508 wizyt
pytanie zadane 2 maja 2019 w Python przez TomJar Nowicjusz (230 p.)
0 głosów
1 odpowiedź 920 wizyt
pytanie zadane 27 maja 2015 w C i C++ przez LogicznyMat Użytkownik (940 p.)
0 głosów
2 odpowiedzi 1,145 wizyt

93,456 zapytań

142,451 odpowiedzi

322,721 komentarzy

62,837 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Kursy INF.02 i INF.03
...