Проблема с хранением чисел в строковом массиве в Java - PullRequest
0 голосов
/ 10 ноября 2019

Я пытаюсь сохранить результаты операции xor в массив строк. Когда я запускаю свой код, как показано, он может распечатать значения.

int[] randnumbs = new int[0];
randnumbs = streamGen(plaintext.length());
String plaintextnumb;

String encryption;

int[] answer = new int[0];
int count = 0;

while(true) {
    plaintextnumb = plaintext.substring(count, count + 2);
    int numbfromfile = Integer.valueOf(plaintextnumb, 16);
    int xored = numbfromfile ^ randnumbs[count];

    encryption = Integer.toHexString(xored);

    System.out.print(encryption + " "); 
    if(count == (plaintext.length() / 2) - 1) {
        break;
    }else {
        count++;
    }
}

результаты:

af a0 52 b1 fb 0 a6 75 

Когда я изменяю свою переменную «шифрование» на массив строк, мой код может работать, но швы перестают работать, когда он достигает, где «шифрование»[count] = Integer.toHexString (xored); "Я никогда не сталкивался с этой проблемой раньше. Когда я запускаю свою программу, никаких ошибок не появляется, просто отображается пустая консоль. Я также вставил операторы распечатки до и после этой строки кода и мог видеть распечатку только до строки кода, а не после. Любое объяснение того, почему это происходит, будет с благодарностью!

int[] randnumbs = new int[0];
randnumbs = streamGen(plaintext.length());
String plaintextnumb;

String[] encryption = new String[0];

int[] answer = new int[0];
int count = 0;

while(true) {
    plaintextnumb = plaintext.substring(count, count + 2);
    int numbfromfile = Integer.valueOf(plaintextnumb, 16);
    int xored = numbfromfile ^ randnumbs[count];

    encryption[count] = Integer.toHexString(xored);

    System.out.print(encryption[count] + " "); 
    if(count == (plaintext.length() / 2) - 1) {
        break;
    }else {
        count++;
    }
}

Ответы [ 2 ]

1 голос
/ 10 ноября 2019

Проблема в том, что размер массива encryption равен 0 из-за объявления String[] encryption = new String[0];. Таким образом, присвоение значения с помощью оператора encryption[count] = Integer.toHexString(xored); может привести к ArrayIndexOutOfBoundsException, поскольку значение count может увеличиться (может стать больше 0).

Решением может быть объявлениеваш массив с требуемым размером, например String[] encryption = new String[10];

Также, пожалуйста, проверьте, поставили ли вы точку отладки в строке, encryption[count] = Integer.toHexString(xored); и запускаете ли вы программу в Debug Режим. Если да, это может быть причиной того, что ваша программа не выходит за рамки этой строки.

0 голосов
/ 10 ноября 2019

Я думаю, потому что вы создаете массив шифрования с размером 0, поэтому он не может иметь значения. Поэтому, когда вы пытаетесь использовать шифрование [количество], значение не существует. Используйте ArrayList и используйте метод add (), чтобы добавить строку в ваш список

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...