我试图多次修复问题,但我没有得到产生异常的问题,这是“--------------------配置: - ------------------ ë
xception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 56
at testing.compressionPBox(testing.java:61)
at testing.parityDrop(testing.java:39)
at testing.roundKeyGenerator(testing.java:23)
at testing.main(testing.java:14)"
只需我的程序创建一个64长度的数组,然后用1到64的值填充它然后使用方法roundKeyGenerator(roundArray);要执行该方法,当该方法执行时,它创建一个长度为56的数组,然后使用parityDrop方法从长度为64的初始数组返回长度为56的数组,但是如何创建和删除一些索引!!简单地说,我创建了一个预定义的表,当我通过索引从最初从0开始调用表方法时,该方法获取此索引并查看table_cell的值是什么[index] = value_X 然后将value_x返回给调用者metod并将vaule_X作为intailArray的索引,其大小为64并获取其值,然后将其存储在返回的数组中,具体取决于其指针停止的位置,我认为指针是问题,我认为第二个56长度的数组超过限制,然后产生异常。
static int [] roundArray=new int [64];
public static void main(String [] arg)
{
for(int i=0;i<roundArray.length;i++)
roundArray[i]=i+1;
roundKeyGenerator(roundArray) ;
}
public static int [] roundKeyGenerator(int [] k) //takes an int array of length 64 repesents the key in binary representation
{
int [] key=new int [56];
key=parityDrop(k);
return key;
}
public static int [] parityDrop(int [] key)//takes an int array of length 64 repesents the key and return the key in an arrayof length 56
{
int index;
int [] result=new int[56];
for(int i=0;i<key.length;i++)
{
index=compressionPBox(i);//return cell value from straightPBoxTable
result [i]= key[index-1];
}
return result;
}
public static int compressionPBox(int i){
int cell[] =new int [56];
cell[0] =57 ;cell[1] =49 ;cell[2]=41 ;cell[3] =33 ;cell[4] =25 ;cell[5] =17 ;cell[6] =9 ;cell[7] =1;
cell[8] =58 ;cell[9] =50 ;cell[10]=42 ;cell[11]=34 ;cell[12]=26 ;cell[13]=18 ;cell[14]=10 ;cell[15]=2;
cell[16]=59 ;cell[17]=51 ;cell[18]=43 ;cell[19]=35 ;cell[20]=27 ;cell[21]=19 ;cell[22]=11 ;cell[23]=3;
cell[24]=60 ;cell[25]=52 ;cell[26]=44 ;cell[27]=36 ;cell[28]=63 ;cell[29]=55 ;cell[30]=47 ;cell[31]=39;
cell[32]=31 ;cell[33]=23 ;cell[34]=15 ;cell[35]=7 ;cell[36]=62 ;cell[37]=54 ;cell[38]=46 ;cell[39]=38;
cell[40]=30 ;cell[41]=22 ;cell[42]=14 ;cell[43]=6 ;cell[44]=61 ;cell[45]=53 ;cell[46]=45 ;cell[47]=37;
cell[48]=29 ;cell[49]=21 ;cell[50]=13 ;cell[51]=5 ;cell[52]=28 ;cell[53]=20 ;cell[54]=12 ;cell[55]=4;
return cell[i];
}// predefined permutation rule
答案 0 :(得分:4)
for(int i=0;i<key.length;i++)
{
index=compressionPBox(i);//return cell value from straightPBoxTable
result [i]= key[index-1];
}
您无法索引负数组。第一个循环上的index = 0。 key [-1]是一个错误。
答案 1 :(得分:2)
你的阵列有不同的大小 - 一个有56个,一个有64个。出现问题。
答案 2 :(得分:2)
package org.ferencszaszdi.sistemaNit;
public class SistemaNit {
public static void main(String args[]) {
String nit = "3894140-6";
String valor[]={};
int num= nit.length();
int num2 = num - 2;
int numero = num;
int in = 0;
int va = 0;
for(int inicio = 0;inicio<=num;inicio++) {
valor[in] = nit.substring(in);
in++;
}
int in2 = 0;
for(int inicio2 = 0;inicio2<=num2;inicio2++) {
int valor2 = Integer.parseInt(valor[in2]);
int val = numero * valor2;
va = va + val;
numero--;
in2++;
}
String residuo = nit.substring(num);
int residuo2 = Integer.parseInt(residuo);
int nume = va%11;
if (nume == residuo2){
System.out.println ("El nit es correcto");
}
else
{
System.out.println ("El nit es incorrecto");
}
}
}
答案 3 :(得分:1)
您的数组roundArray
的长度为64,但在方法roundKeyGenerator
,parityDrop
和compressionPBox
内,您有长度为56的数组。
您正在使用parityDrop
调用方法k
,然后循环它。在parityDrop
中,您使用变量compressionPBox
调用i
,该变量将介于0到63之间(key
的长度)。但是在compressionPBox
中,您正在返回cell[i]
,当i
为&gt; = 56时,这将失败。
注意:要解决这样的问题,请仔细查看异常的堆栈跟踪。它会准确地告诉您错误发生在源文件的哪一行。转到源代码中的那个位置并追溯出错的地方。您还可以使用调试器逐步执行代码以了解发生的情况。 Eclipse和NetBeans等IDE都有非常好的内置调试器。
答案 4 :(得分:0)
您的错误在compressionPBox
。以下是它如何实现:
main
调用roundKeyGenerator
传递roundArray
(int[64]
} k
参数。roundKeyGenerator
调用parityDrop
,为k
参数传递key
。parityDrop
从0
(包括)循环到key.length
(不包含),因此会从0
... 63
(包括)循环调用compressionPBox
包含i
参数的每个值。{/ 1>
compressionPBox
使用i
索引cell
,int[56]
。 ...这就是为什么您的ArrayIndexOutOfBoundsException
报告索引56上的错误。一旦i
达到56,您就无法再使用该值索引cell
。< / p>