ошибка когда больше 7 символов

265
20 мая 2017, 17:42

Помогите пожалуйста, почему выдает ошибка, когда пишешь на команде больше 7 символов??? Заранее спасибо

import java.util.Arrays;
import java.util.Scanner;
public class Encrypted {
public static void main(String[] args) {
    Scanner t = new Scanner(System.in);
    Scanner k = new Scanner(System.in);
    String text, key;
    byte[] result = new byte[1000];
    System.out.print("Введите текст для зашифровки: ");
    text = t.nextLine();
    System.out.print("Введите 4 значный ключ шифрования с пробелами: ");
    key = k.nextLine();
    //System.out.println();
    System.out.println(key);
    for (int i = 0; i < text.length(); i++) {
        byte[] text_byte = text.getBytes();
        byte[] key_byte = key.getBytes();
        //if (key_byte[i])
        result[i] = (byte) (text_byte[i] + key_byte[i]);
        //System.out.print("\n" + (text_byte[i]));
        String c_str = new String(result);
        System.out.print(c_str);
        //System.out.print("\n" + (result[i]));
        result[i] = 0;
    }
    System.out.println();
}

}

Введите текст для зашифровки: 12345678
Введите 4 значный ключ шифрования с пробелами: 1 2 3 4
1 2 3 4

b R e T h V k Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 7 at Encrypted.main(Encrypted.java:29)

Answer 1

Всё просто:

когда ты вводишь ключ: 1 2 3 4, то длина массива key_byte равна 7, а не 8. Поэтому когда i = 7, то key_byte[i] выкидывает ошибку.

Если же поставить в конце 1 2 3 4 пробел — то будет 8 элементов и ошибки не будет.

Либо дозаполнять последний элемент массива байтом, либо придумывать еще что-то, чтобы работало как задумано

Все это ты бы мог сам увидеть банально включив отладчик и отладив свой код Отладчик IntelliJ IDEA.

Answer 2

вы не правильно реализовали алгоритм нужен двойной цикл

` for (int i = 0; i < text.length(); i++) {
        byte[] text_byte = text.getBytes();
        byte[] key_byte = key.getBytes();
        for(int j=0; j<key_byte.lenght; j++)
            result[i] = (byte) (text_byte[i] + key_byte[j]);
        ....`

конечно при условии что я понял что вы хотите сделать, дайте алгоритм шифрования если я вас не понял

READ ALSO
Программное закрытие приложения Android

Программное закрытие приложения Android

Код выставлять не буду, ибо толку от этого ноль в моем случаеВсе очень просто

348
Как проходит оплата на upWork?

Как проходит оплата на upWork?

Добрый деньВчера получил первый заказ на UpWork

549
Как получить token для уведомлений?

Как получить token для уведомлений?

Как получить токен в android приложении программно для получения уведомлений?

237