Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 是否可以使用字符串作为计算?_Java_String_User Interface_Math_Input - Fatal编程技术网

Java 是否可以使用字符串作为计算?

Java 是否可以使用字符串作为计算?,java,string,user-interface,math,input,Java,String,User Interface,Math,Input,我是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

我是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();
}
字符串文本;
字符串encryptedText=“”;
字符;
int n;
Text=mainprogram.tanput.getText();
int length=Text.length();
for(int i=0;i
tencryptedformula是一个写入计算的文本字段:例如2*n+1。如果我直接在代码中键入这个公式,它可能会加密它。但是我不能让它接受我的字符串作为公式。它给出错误:“不兼容类型:字符串无法转换为字符”。我怎样才能解决这个问题


提前谢谢。

据我所知,您试图将字符串转换为计算。您不能简单地输入一个字符串,然后期望Java自动识别您想用它做什么


如果你问我怎么想,你需要解析字符串来显式地提取代数项并以编程方式替换操作符。这将更容易直接在您的代码中使用,并且可能提供在不同公式之间切换的选项;不要试图编写解析器来计算任何泛型表达式。

在Java中,不能直接将字符串计算为数学表达式(它是一种编译语言)。您必须为此编写自己的解析器,这实际上是相当多的工作,其他人也已经完成了

因此,另一种方法是从Java调用解释语言,例如使用 JavaScript通过。因此,您可以让用户在某个文本字段中输入公式,检索文本,并通过将字符的十进制值放入公式中对其进行计算,公式将返回加密字符的十进制值

示例(未经测试):

//加密字符的公式,例如“2*n+1”。
字符串表达式=textfieldFormula.getText();
ScriptEngine解释器=新建ScriptEngineManager().getEngineByName(“JavaScript”);
字符串textToEncrypt=textfieldInput.getText();
字符串encryptedText=“”;
字符串encryptedText=“”;
对于(int i=0;i
您可能需要添加一些小的修改以使代码段适应您的需要


干杯

与循环查看
文本
的方式相同,循环查看
tencryptingformular
中的每个字符。是否使用公式加密文本?请先看一看字典,因为“formular”不是一个英语单词。我可能理解错了,但您是否试图将文本字段中的公式连接到
encryptedText
变量?在这种情况下,只需使用
encryptedText+=tencryptingformular.getText()该程序没有多大意义。如果您尝试解释如何在代码中实现caesar加密,则会更好。什么是字符和n?Zeichen是指定的,从未使用过。tencryptingformular.getText()做什么?好的,有没有办法编写这样的程序或链接指令?你可以自己编写,或者在谷歌上搜索一下,我相信你可以找到一个库或一些资源来帮助你。@ashold7询问库在这里是离题的。查看姐妹站点,软件建议堆栈交换。
// 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…
   }
}