我有一个名为char[]
的{{1}}数组,其中只包含temp
,a
或b
。现在,如果数组中的两个相邻字符是不同的,即c
和temp[j]
分别包含temp[j+1]
和a
,我需要将b
存储在{{ 1}}。
为此,我定义了,
c
是temp[j+1]
,private static final int CHARSUM = 294;
和a
的ASCII值之和。我尝试的是从b
中减去c
和temp[j]
的总和。
temp[j+1]
如果其他值为294
和temp[j+1] = CHARSUM-(temp[j]+temp[j+1]);
,则应存储值c
。
但在这里,问题是:
不兼容的类型:从int到char的可能有损转换
我尝试改为:
a
b
private static final char CHARSUM = "294";
然而,这些都没有奏效,我没有找到任何其他可以帮助我解决问题的答案。所以任何帮助解决这个问题将受到高度赞赏。感谢。
答案 0 :(得分:4)
您可以将减法的结果转换为char:
temp[j+1] = (char)(CHARSUM-(temp[j]+temp[j+1]));
答案 1 :(得分: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
- 整个表达式仍为int
。getNumericValue
会返回int
而不是char
,因此您必须投出。