为什么不更新数组的长度,从而导致索引超出范围错误?

时间:2019-09-11 01:46:31

标签: java arrays encryption

EncryptedArr方法中,我的2D数组encryptData的大小似乎没有得到更新。

此方法用于将字符串(在main方法中提供)加密为整数数组。为了查看循环是否确实将数据正确地放入了数组中,我需要数组的大小来匹配进入其中的数据。

static void encryptData(String toEncrypt)
{
   stringLength = toEncrypt.length()
   encryptedArr = new int[stringLength][stringLength]
   for (rowIndex = 0; rowIndex <= stringLength; rowIndex++)
   {
      for (columnIndex = 0; columnIndex < encryptedArr[rowIndex].length; 
                                                          columnIndex++)
      {
         while (indexOfString <= stringLength)
         {
            charToEncrypt = toEncrypt.charAt(indexOfString)
            charValue = charToEncrypt;
            encryptedArr[rowIndex][columnIndex] += charValue;
            indexOfString++;
         }
      }
   }
}
public static void main(String[] args)
{
   String thing = "1";
   encryptData(thing);
   System.out.println("Here is the array: "+ encryptedArr);
}

charAt导致“字符串索引越界”错误,我认为这是由于数组的大小未更新以匹配要加密的字符串的大小所致。主要方法应该完整打印数组。 EncryptData和Main方法都在上面。为什么更新数组大小的代码无法正常工作,该如何解决?

1 个答案:

答案 0 :(得分:2)

for (rowIndex = 0; rowIndex <= stringLength; rowIndex++){ //here
    for (columnIndex = 0; columnIndex < encryptedArr[rowIndex].length;columnIndex++){
         while (indexOfString <= stringLength){
          charToEncrypt = toEncrypt.charAt(indexOfString)
          charValue = charToEncrypt;
          encryptedArr[rowIndex][columnIndex] += charValue;
          indexOfString++;
     }
  }

}

在您的第一个for循环中,您已将重复条件设置为小于或等于字符串长度,因此,当rowIndex等于字符串长度时,调用cryptoArr将给您一个错误,因为数组的最高索引始终小于size 1数组。