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))));
}
}
}
Você está substituindo a variável key
em 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 key
e "substituições" key
por este personagem. A iteração seguinte com a == 1
e b == 2
irá causar uma StringIndexOutOfBoundsException
porque key
tem 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.