Почему проблема с шифрованием моего Цезаря не работает? - PullRequest
0 голосов
/ 22 марта 2020

У меня проблемы с запуском этого l oop для назначения в университет. Выполняется первая, которая дает правильную первую букву, но затем выдает ошибку, потому что конечный индекс каким-то образом находится вне диапазона. Я пытался настроить несколько вещей, но это все еще не работает.

Это ошибка:

Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 2
    at java.lang.String.substring(String.java:1963)
    at Assignment4.Question4.main(Question4.java:18)

Мой код:

package Assignment4;

import java.util.Scanner;

public class Question4 {

  public static void main(String[] args) {      
    Scanner in = new Scanner(System.in);
    System.out.print("Type a string: ");
    String message = in.nextLine();
    System.out.print("Type a key of the same length: ");
    String key = in.nextLine();
    in.close();

    int messageLength = message.length();

    for (int a = 0, b = 1; a < messageLength && b <= messageLength; a++, b++) {
      key = key.substring(a,b);
      message = message.substring(a,b);
      System.out.print(String.valueOf((char)(message.charAt(0) + Integer.parseInt(key))));
    }
  }

}

1 Ответ

0 голосов
/ 22 марта 2020

Вы переопределяете переменную key в вашем l oop.

for (int a = 0, b = 1; a < messageLength && b <= messageLength; a++, b++) {
      key = key.substring(a,b);

Первая итерация дает вам самый первый символ начального значения для key и "переопределения" key этим персонажем. Следующая итерация с a == 1 и b == 2 вызовет StringIndexOutOfBoundsException, поскольку key имеет только длину 1.


FYI: Будет вызвана та же ошибка по message.


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

...