如何在java中执行ASCII减法

如何在java中执行ASCII减法,java,arrays,Java,Arrays,我有一个名为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。 但这

我有一个名为
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])

然而,这些都不起作用,我也没有找到任何其他的答案来帮助我解决这个问题。因此,我们将非常感谢您为解决此问题提供的任何帮助。谢谢。

您可以将减法结果转换为字符:

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

您可以将减法结果强制转换为字符:

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”
    是一个
    字符串,而不是
    int
  • 强制转换仅应用于
    CHARSUM
    -整个表达式仍然是
    int
  • getNumericValue
    返回的是
    int
    而不是
    char
    ,因此必须强制转换

在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”
    是一个
    字符串,而不是
    int
  • 强制转换仅应用于
    CHARSUM
    -整个表达式仍然是
    int
  • getNumericValue
    返回的是
    int
    而不是
    char
    ,因此必须强制转换

感谢您帮助了解更多:-)感谢您帮助了解更多:-)