为什么我不断收到 ArrayIndexOutOfBoundsException?
Why do I keep getting ArrayIndexOutOfBoundsException?
我知道 ArrayIndexOutOfBoundsException 意味着您正在尝试访问数组中未定义的内容,并尝试查找解决方案。所有解决方案都说您需要使用 <
而不是 =<
,仅此而已。我不明白为什么我下面的循环一直给我 ArrayIndexOutOfBoundsException 错误。
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++;
}
我试过 int i=0
、int i = 1
、myMessage.length() - 1
。它不应该试图给我比数组更进一步的东西,但我不知道。
完整代码:
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();
}
}
当我 运行 我的程序(额外的代码在驱动程序中)时,我得到以下信息:
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)
问题是 myMessage.length()
是 myMessage
中的 个字符 ,而 numbers.size
是 个字符在 myMessage
.
中表示 的整数
在您的示例 运行 中,myMessage
是 "22 12 20 28"
,它有 11 个字符,因此您从 0
迭代到 10
;但是 numbers
是一个只有四个数字的数组(0
到 3
),因此 numbers[i]
将对任何大于 [=22= 的 i
引发此异常].
如果我没有正确理解你想要做什么,你只需要改变这个:
for (int i=0; i < myMessage.length(); ){
对此:
for (int i=0; i < numbers.size; ){
我知道 ArrayIndexOutOfBoundsException 意味着您正在尝试访问数组中未定义的内容,并尝试查找解决方案。所有解决方案都说您需要使用 <
而不是 =<
,仅此而已。我不明白为什么我下面的循环一直给我 ArrayIndexOutOfBoundsException 错误。
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++;
}
我试过 int i=0
、int i = 1
、myMessage.length() - 1
。它不应该试图给我比数组更进一步的东西,但我不知道。
完整代码:
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();
}
}
当我 运行 我的程序(额外的代码在驱动程序中)时,我得到以下信息:
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)
问题是 myMessage.length()
是 myMessage
中的 个字符 ,而 numbers.size
是 个字符在 myMessage
.
在您的示例 运行 中,myMessage
是 "22 12 20 28"
,它有 11 个字符,因此您从 0
迭代到 10
;但是 numbers
是一个只有四个数字的数组(0
到 3
),因此 numbers[i]
将对任何大于 [=22= 的 i
引发此异常].
如果我没有正确理解你想要做什么,你只需要改变这个:
for (int i=0; i < myMessage.length(); ){
对此:
for (int i=0; i < numbers.size; ){