如何在java中执行ASCII减法

时间:2016-03-25 13:49:19

标签: java arrays

我有一个名为char[]的{​​{1}}数组,其中只包含tempab。现在,如果数组中的两个相邻字符是不同的,即ctemp[j]分别包含temp[j+1]a,我需要将b存储在{{ 1}}。

为此,我定义了,

c

temp[j+1]private static final int CHARSUM = 294; a的ASCII值之和。我尝试的是从b中减去ctemp[j]的总和。

temp[j+1]

如果其他值为294temp[j+1] = CHARSUM-(temp[j]+temp[j+1]); ,则应存储值c。 但在这里,问题是:

  

不兼容的类型:从int到char的可能有损转换

我尝试改为:

  • a
  • b
  • private static final char CHARSUM = "294";

然而,这些都没有奏效,我没有找到任何其他可以帮助我解决问题的答案。所以任何帮助解决这个问题将受到高度赞赏。感谢。

2 个答案:

答案 0 :(得分:4)

您可以将减法的结果转换为char:

temp[j+1] = (char)(CHARSUM-(temp[j]+temp[j+1]));

答案 1 :(得分:1)

在Java中,char是"真的" 065535之间的整数。如果您要将该范围外的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 - 整个表达式仍为int
  • getNumericValue会返回int而不是char,因此您必须投出。