![](/img/trans.png)
[英]JAVA: Algorithms : How can i perform Subtraction Operation in Encrypted Values
[英]How to perform ASCII subtraction in java
我有一个名为temp
的char[]
数组,其中仅包含a
, b
或c
。 现在,如果数组中的两个相邻字符是不同的,即temp[j]
和temp[j+1]
分别包含a
和b
,则需要将c
存储在temp[j+1]
。
为此,我定义了
private static final int CHARSUM = 294;
这是a
, b
和c
的ASCII值之和。 我试图从294
减去temp[j]
和temp[j+1]
和。
temp[j+1] = CHARSUM-(temp[j]+temp[j+1]);
如果其他值为a
和b
,则应存储值c
。 但是在这里, 问题是:
不兼容的类型:从int到char的可能的有损转换
我尝试更改为:
private static final char CHARSUM = "294";
temp[j+1] = (char)CHARSUM-(temp[j]+temp[j+1]);
temp[j+1] = Character.getNumericValue(CHARSUM-(temp[j]+temp[j+1]));
但是,这些都没有起作用,我没有找到任何其他答案可以帮助我解决问题。 因此,任何解决此问题的帮助将不胜感激。 谢谢。
您可以将减法的结果转换为char:
temp[j+1] = (char)(CHARSUM-(temp[j]+temp[j+1]));
在Java中, char
是“真正的”整数,介于0
和65535
之间。 如果要将超出范围的int
分配给char
变量,则需要显式强制转换。
例如
char c = 65535; // ok
char c = 65536; // doesn't compile
char c = (char) 65536; // compiles, but it's a lossy conversion
即使你的价值观, CHARSUM-(temp[j]+temp[j+1])
总是在这个范围内,编译器不能告诉大家,因为它不是一个编译时间常数。 因此,您需要对整个表达式进行强制转换:
temp[j+1] = (char) (CHARSUM-(temp[j]+temp[j+1]));
您的方法无效,原因如下:
"294"
是一个String
,而不是一个int
。 CHARSUM
仅应用于CHARSUM
整个表达式仍然是int
。 getNumericValue
返回一个int
而不是char
,因此您必须进行强制转换。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.