Программа шифрования артишока, выдающая мне строковый индекс вне диапазона - PullRequest
0 голосов
/ 14 октября 2011

Я должен сделать Java-программу (шифр артишока) хорошо ... пожалуйста, помогите LOL

он продолжает выдавать мне ошибку -

 "
    java.lang.StringIndexOutOfBoundsException: String index out of range: 11
    at java.lang.String.charAt(String.java:686)
    at ArtichokeCipher.main(ArtichokeCipher.java:29)
    "

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

//PROGRAM
import java.util.Scanner;
import java.io.*;

public class ArtichokeCipher {
public static void main(String[] args) throws IOException {
    Scanner scan1 = new Scanner (System.in);

    System.out.println("Welcome to Artichoke Cipher!");
    System.out.println("Please name input file to be processed: ");
    String filei = scan1.next();
    Scanner scan = new Scanner (new File (filei));

    System.out.println("Please enter the word to be used as the cipher key: ");
    String shift = scan1.next();
    String lowcase = shift.toLowerCase();


    while (scan.hasNext()) {
    String word = scan.nextLine();
    String answer = "";
    for (int i = 0; i < word.length(); i++)
    {
       char curChar = word.charAt(i);
       char key = lowcase.charAt(i);
       char newChar = (char)(curChar + key);
       if (curChar >= 'A' && curChar <= 'Z'){
           if (newChar > 'Z')
           newChar = (char)(newChar-26);
        }
        else if (curChar >= 'a' && curChar <= 'z') {
            if (newChar > 'z')
            newChar = (char)(newChar - 26);
    }
}
            System.out.println("Encoded: " + answer);
}
}
}

любая помощь приветствуется благодаря

1 Ответ

0 голосов
/ 14 октября 2011

Вы потенциально заполняете строку в этой строке:

char key = lowcase.charAt(i);

Причина в том, что индекс i действителен для word, но может превышать длину lowcase. В этом случае вы можете сделать исключение Out of Bounds, если word длиннее lowcase.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...