I know that the ArrayIndexOutOfBoundsException means that you're trying to access something not defined in the array, and tried to look up solutions. All the solutions say that you need to use <
rather than =<
, but that's about it. I don't understand why my loop below keeps giving me ArrayIndexOutOfBoundsException erros.
for (int i=0; i < myMessage.length(); ){
eInteger = eNumbers[i];
myInteger = numbers[i];
System.out.println(eInteger + " " + myInteger);
character = myInteger - eInteger;
stringCharacter = Integer.toString(character);
//decryptedMessage = decryptedMessage + " " + stringCharacter;
System.out.println(character);
i++;
}
I've tried int i=0
, int i = 1
, myMessage.length() - 1
. It shouldn't be attempting to give me something further than the array, but I don't know.
Full code:
public class Decrypt {
private String myMessage;
private String e = "2718281828459045235360287471352662497757247093699959574966967627724076630353547594571382178525166427427466391932003059921817413596629043572900334295260595630738132328627943490763233829880753195251019011573834187930702154089149934884167509244761460668082264800168477411853742345442437107539077744992069551702761838606261331384583000752044933826560297606737113200709328709127443747047230696977209310141692836819025515108657463772111252389784425056953696770785449969967946864454905987931636889230098793127736178215424999229576351482208269895193668033182528869398496465105820939239829488793320362509443117301238197068416140397019837679320683282376464804295311802328782509819455815301756717361332069811250996181881593041690351598888519345807273866738589422879228499892086805825749279610484198444363463244968487560233624827041978623209002160990235304369941849146314093431738143640546253152096183690888707016768396424378140592714563549061303107208510383750510115747704171898610687396965521267154688957035035402123407849819334321068170121005627880235193033224745015853904730419957777093503660416997329725088687696640355570716226844716256079882651787134195124665201030592123667719432527867539855894489697096409754591856956380236370162112047742722836489613422516445078182442352948636372141740238893441247963574370263755294448337";
private String stringCharacter;
private int character;
private int myInteger;
private int eInteger;
private String decryptedMessage = "";
public Decrypt(String myMessage){
this.myMessage = myMessage;
}
public String Decryption(){
String[] splitMessage = myMessage.split(" ");
int[] numbers = Arrays.stream(splitMessage)
.mapToInt(Integer::parseInt).toArray();
String[] eMessage = e.split("");
int[] eNumbers = Arrays.stream(eMessage)
.mapToInt(Integer::parseInt).toArray();
for (int i=0; i < myMessage.length(); ){
eInteger = eNumbers[i];
myInteger = numbers[i];
System.out.println(eInteger + " " + myInteger);
character = myInteger - eInteger;
stringCharacter = Integer.toString(character);
//decryptedMessage = decryptedMessage + " " + stringCharacter;
System.out.println(character);
i++;
}
return stringCharacter;
}
public String toString(){
return "Message: " + Decryption();
}
}
When I run my program (the extra code is in a driver) I get the following:
Welcome to this cryptographic program! Would you like to encrypt or decrypt a message?
Please enter 1 to encrypt, and 2 to decrypt.
2
Thank you! Please type the message you would like to encrypt or decrypt.
22 12 20 28
2 22
Exception in thread "main" 20
7 12
5
1 20
19
8 28
20
java.lang.ArrayIndexOutOfBoundsException: 4
at Program4.Decrypt.Decryption(Decrypt.java:30)
at Program4.Decrypt.toString(Decrypt.java:42)
at java.lang.String.valueOf(Unknown Source)
at java.io.PrintStream.println(Unknown Source)
at Program4.Driver.main(Driver.java:28)