将 bigInteger 值添加到二维数组
add a bigInteger value to a 2d array
下面的代码不起作用,因为它使用模对负数进行计算。所以我必须将值解析为声明为 BigInteger 而不是 int 的二维数组。
BigInteger bi2, bi3;
int det=(key[0][0] * key[1][1])-(key[0][1] * key[1][0]);
BigInteger bi1 = new BigInteger(String.valueOf(det));
bi2 = new BigInteger("26");
bi3 = bi1.modInverse(bi2);
int inverse= bi3.intValue();
key[0][0] = inverse * key[0][0];
key[0][1] = inverse * key[0][1];
key[1][0] = inverse * key[1][0];
key[1][1] = inverse * key[1][1];
key2[0][0] = key[1][1];
key2[1][1] = key[0][0];
key2[0][1] = -key[0][1];
key2[1][0] = -key[1][0];
问题出在这里:
它为每个计算打印错误的答案,因为它需要使用 o BigInteger 而不是 inetger 因为负值。
key[0][0] = key2[0][0] % 26;
key[0][1] = key2[0][1] % 26;
key[1][0] = key2[1][0] % 26;
key[1][1] = key2[1][1] % 26;
之后我还想用这个 BigIntegers 做一些计算。然而,计算将只包括整数。所以之后我必须将数组中的那些 BigIntegers 转换为整数。
其余代码:
for (int i = 0; i < str.length(); i++) {
for (int j =0; j< alphabet.size() ; j++){
if (alphabet.get(j) == str.charAt(i)) {
int index = alphabet.indexOf(str.charAt(i));
store.add(index);
}
}
}
System.out.println(Arrays.toString(store.toArray()));
for (; k<store.size(); k++){
sp2 = sp +1;
int n2=0;
int n1 = 0;
if (sp==store.size()-1){
n1 = store.get(sp);
if (sp2> store.size()-1){
n2 = 23;
}
if(sp2 < store.size()) {
n2 = store.get(sp2);
}
fn1 = ((key[0][0] * n1) + (key [0][1] * n2))% 26;
fn2 = ((key[1][0] * n1) + (key [1][1] * n2))%26;
conversion.add(fn1);
conversion.add(fn2);
sp+=2;
}
if (sp > store.size() -1){
break;
}
else{
n1 = store.get(sp);
n2 = store.get(sp2);
fn1 = ((key[0][0] * n1) + (key [0][1] * n2))% 26;
fn2 = ((key[1][0] * n1) + (key [1][1] * n2))%26;
conversion.add(fn1);
conversion.add(fn2);
sp+=2;
}
}
System.out.println(Arrays.toString(conversion.toArray()));
List<Character> encrypted = new ArrayList();
for (int i=0; i<conversion.size(); i++){
int num = conversion.get(i);
char letter = alphabet.get(num);
encrypted.add(letter);
}
System.out.println(Arrays.toString(encrypted.toArray()));
错误信息:线程异常 "main" java.lang.ArrayIndexOutOfBoundsException: -8
错误是这样的(结束前4行):
字符字母 = alphabet.get(num);
对于那些有数学背景的人来说,这是一个令人惊讶的特点
System.out.println("=" + (-3 % 4));
例如,returns -3 而不是 1(在 [0,3] 范围内);
编辑:
换句话说,错误信息
error message: Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: -8
最终是由 (n % m) 可以 return 负值引起的。像
这样的语句
num=(26+num)%26;
会治愈它。
下面的代码不起作用,因为它使用模对负数进行计算。所以我必须将值解析为声明为 BigInteger 而不是 int 的二维数组。
BigInteger bi2, bi3;
int det=(key[0][0] * key[1][1])-(key[0][1] * key[1][0]);
BigInteger bi1 = new BigInteger(String.valueOf(det));
bi2 = new BigInteger("26");
bi3 = bi1.modInverse(bi2);
int inverse= bi3.intValue();
key[0][0] = inverse * key[0][0];
key[0][1] = inverse * key[0][1];
key[1][0] = inverse * key[1][0];
key[1][1] = inverse * key[1][1];
key2[0][0] = key[1][1];
key2[1][1] = key[0][0];
key2[0][1] = -key[0][1];
key2[1][0] = -key[1][0];
问题出在这里: 它为每个计算打印错误的答案,因为它需要使用 o BigInteger 而不是 inetger 因为负值。
key[0][0] = key2[0][0] % 26;
key[0][1] = key2[0][1] % 26;
key[1][0] = key2[1][0] % 26;
key[1][1] = key2[1][1] % 26;
之后我还想用这个 BigIntegers 做一些计算。然而,计算将只包括整数。所以之后我必须将数组中的那些 BigIntegers 转换为整数。
其余代码:
for (int i = 0; i < str.length(); i++) {
for (int j =0; j< alphabet.size() ; j++){
if (alphabet.get(j) == str.charAt(i)) {
int index = alphabet.indexOf(str.charAt(i));
store.add(index);
}
}
}
System.out.println(Arrays.toString(store.toArray()));
for (; k<store.size(); k++){
sp2 = sp +1;
int n2=0;
int n1 = 0;
if (sp==store.size()-1){
n1 = store.get(sp);
if (sp2> store.size()-1){
n2 = 23;
}
if(sp2 < store.size()) {
n2 = store.get(sp2);
}
fn1 = ((key[0][0] * n1) + (key [0][1] * n2))% 26;
fn2 = ((key[1][0] * n1) + (key [1][1] * n2))%26;
conversion.add(fn1);
conversion.add(fn2);
sp+=2;
}
if (sp > store.size() -1){
break;
}
else{
n1 = store.get(sp);
n2 = store.get(sp2);
fn1 = ((key[0][0] * n1) + (key [0][1] * n2))% 26;
fn2 = ((key[1][0] * n1) + (key [1][1] * n2))%26;
conversion.add(fn1);
conversion.add(fn2);
sp+=2;
}
}
System.out.println(Arrays.toString(conversion.toArray()));
List<Character> encrypted = new ArrayList();
for (int i=0; i<conversion.size(); i++){
int num = conversion.get(i);
char letter = alphabet.get(num);
encrypted.add(letter);
}
System.out.println(Arrays.toString(encrypted.toArray()));
错误信息:线程异常 "main" java.lang.ArrayIndexOutOfBoundsException: -8
错误是这样的(结束前4行): 字符字母 = alphabet.get(num);
对于那些有数学背景的人来说,这是一个令人惊讶的特点
System.out.println("=" + (-3 % 4));
例如,returns -3 而不是 1(在 [0,3] 范围内);
编辑:
换句话说,错误信息
error message: Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: -8
最终是由 (n % m) 可以 return 负值引起的。像
这样的语句num=(26+num)%26;
会治愈它。