Получение ошибки при попытке преобразовать элемент массива char в int - PullRequest
0 голосов
/ 28 мая 2018

Ниже приведен код, который я использовал до сих пор:

public static String encrypt(String password) {
    String encrypted = null;
    char passChars[] = password.toCharArray();
    int ascii[] = null;
    for(int i=0;i<passChars.length;i++) {
        ascii[i] = Integer.parseInt(String.valueOf(passChars[i]));
        ascii[i] = ascii[i] + 17;
        passChars[i] = (char)ascii[i];
        encrypted = encrypted + String.valueOf(passChars[i]);
    }
    return encrypted;
}

Когда я пытаюсь запустить его, он запускается, но когда я использую метод шифрования, я получаю следующую ошибку:

Exception in thread "AWT-EventQueue-0" java.lang.NumberFormatException: For input string: "M"
at java.lang.NumberFormatException.forInputString(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at com.package.program.Encryptor.encrypt(Encrypter.java:46)
at com.package.program.Main$3.actionPerformed(Main.java:136)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$500(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)

Я пытался изменить несколько вещей, например, изменить способ преобразования char в int, но ничего не получалось ... Что я делаю не так?

Ответы [ 3 ]

0 голосов
/ 28 мая 2018

Эта строка неверна:

ascii[i] = Integer.parseInt(String.valueOf(passChars[i]));

Вы пытаетесь преобразовать буквы вашего пароля в целые числа.Нет гарантии, что пароль состоит только из цифр.

Вместо этого вы можете:

ascii[i] = passChars[i] + 17;

напрямую.

0 голосов
/ 28 мая 2018

Инициализируйте ascii [] с допустимым размером, иначе вы можете получить индекс из привязанного исключения, и эта программа будет работать только для пароля только в виде числовой строки.

0 голосов
/ 28 мая 2018

Если вы хотите «зашифровать» строку, просто сместив каждый символ на некоторое количество, то просто сделайте это напрямую:

String encrypted = null;
char passChars[] = password.toCharArray();
for (int i=0; i < passChars.length; i++) {
    passChars[i] += 17;
}
encrypted = new String(passChars);

enter image description here

Демо

Обратите внимание, что добавление 17 к определенным символам ASCII может привести к тому, что вы не сможете распечатать.Не ясно, чего вы пытаетесь достичь здесь;если вы хотите систематически зашифровать пароль на другие символы, то нам, возможно, придется обернуться, используя модуль.

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