Por que não é o meu problema de encriptação de César não correr?

LS Gwen:

Estou tendo problemas com a execução deste ciclo para uma atribuição para a universidade. Corre-se o primeiro dando a primeira letra correta, mas, em seguida, dando um erro porque o índiceFinal está fora do alcance de alguma forma. Eu tentei ajustar várias coisas, mas ainda não funciona.

Este é o erro:

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)

Meu código:

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))));
    }
  }

}
akuzminykh:

Você está substituindo a variável keyem seu loop.

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

A primeira iteração dá-lhe o primeiro caractere do valor inicial para keye "substituições" keypor este personagem. A iteração seguinte com a == 1e b == 2irá causar uma StringIndexOutOfBoundsExceptionporque keytem apenas o comprimento 1.


FYI: O mesmo erro será causada por message.


Para resolver o problema que você precisa variáveis ​​adicionais para armazenar os resultados temporários e o resultado final.

Acho que você gosta

Origin http://43.154.161.224:23101/article/api/json?id=345145&siteId=1
Recomendado
Clasificación