Можно ли использовать строку в качестве расчета? - PullRequest
0 голосов
/ 31 января 2019

Я новичок в Jave, и я пытаюсь разработать программу, которая использует алгоритм cesar для шифрования.

String Text;
String encryptedText = "";
char character;
int n;

Text = mainprogramm.tainput.getText();
int length = Text.length();
for (int i = 0; i < length; i++) {
    character = Text.charAt(i);
    n = (int) character;
    encryptedText = encryptedText + (char) tencryptingformula.getText();
}

tencryptedformula - это текстовое поле, в котором написано вычисление: например.2 * п + 1.Если я напишу эту формулу непосредственно в своем коде, она, вероятно, зашифрует ее.Однако я не могу заставить его принять мою строку в качестве формулы.Выдает ошибку: «несовместимые типы: строка не может быть преобразована в символ».Как я могу это исправить?

Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 31 января 2019

Вы не можете напрямую оценить String как математическое выражение в Java (это скомпилированный язык).Для этого вам придется написать собственный синтаксический анализатор, который на самом деле довольно трудоемкий, и это уже делали другие люди.

Так что другой подход заключается в вызове интерпретируемого языка из Java,например, используя JavaScript через ScriptEngine.Итак, что вы можете сделать, это позволить пользователю ввести формулу в некотором текстовом поле, извлечь текст и оценить его, поместив десятичное значение символа в формулу, которое вернет вам десятичное значение зашифрованного символа.

Пример ( не проверено проверено):

// The formula wich encrypts characters, e.g. "2*n+1".
String expression = textfieldFormula.getText();
ScriptEngine interpreter = new ScriptEngineManager().getEngineByName("JavaScript");

String textToEncrypt = textfieldInput.getText();
String encryptedText = "";

String encryptedText = "";

for (int i = 0; i < textToEncrypt.length(); i++) {
   int unencrypted = textToEncrypt.charAt(i);
   interpreter.put("n", unencrypted);
   try {
      // Calculate the result now that n is set.
      Object result = interpreter.eval(expression);
      // result is a double which we need to cast, or round.
      int encryptedChar = (int) Double.parseDouble(result.toString());
      encryptedText += (char) encryptedChar;
   } catch (ScriptException ex) {
      System.err.println("Cannot evaluate: " + expression);
      // Handle unevaluateable formula here…
   }
}

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

Приветствия

0 голосов
/ 31 января 2019

Из того, что я понимаю, вы пытаетесь превратить строку в вычисление.Вы не можете просто ввести строку и ожидать, что Java автоматически распознает, что вы хотите с ней сделать.

Если вы спрашиваете, что я думаю, вам нужно будет проанализировать строку, чтобы явно вытянутьалгебраические термины и программные замены операторов.Было бы намного проще иметь это непосредственно в вашем коде и, возможно, предоставить возможность переключаться между различными формулами;вместо того, чтобы пытаться написать синтаксический анализатор для оценки любого общего выражения.

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