Java int值类型为Character

时间:2017-09-02 04:24:28

标签: java arraylist int character

我是java的新手,并且正在开发一个crud计算器,它接受输入并将其保存在ArrayList中以执行计算。

我正在尝试在ArrayList<Character>中添加两个值,然后将“+”替换为总和。

    if(listEqu.contains('+')) {
        while(listEqu.indexOf('+') > -1) {

                int plus = listEqu.indexOf('+');
                int prev = listEqu.get(plus-1);
                int nxt = listEqu.get(plus+1);
                Character sum = (char) (nxt + prev);

                listEqu.set(plus, sum);

                System.out.println(listEqu);

        }
    }

当输入为1+1时,返回[1, b, 1]。 我想要的是返回[1, 2, 1]。 有什么建议?谢谢!

5 个答案:

答案 0 :(得分:1)

问题实际上是添加两个字符并不符合您的预期。

'1' + '1'的值为'b'。如果您想要'1'之后的下一个数字,则将整数1添加到其中;即'1' + 1'2'

为了更深入地理解,您需要了解如何用Java表示字符数据。

Java中的每个char值都是无符号的16位整数,对应于Unicode基本平面中的代码点(或字符代码)。这些代码点中的前128个(0到127)对应于旧ASCII字符集中的字符。在ASCII中,表示数字的代码是48(对于'0')到39(对于'9')。小写字母为97(对于'a')到122(对于'z')。

正如您所见,'1' + '1' - &gt; 49 + 49 - &gt; 98 - &gt; 'b'

(实际上它还有很多东西。并非所有char值都代表真实字符,而某些Unicode代码点需要两个char值。但这超出了范围你的问题。)

  

如何指定添加数字而不是添加字符?

将字符(数字)转换为数字,执行算术,并将结果转换回字符。

阅读Character类的javadoc;例如方法Character.digitCharacter.forDigit

请注意,这仅在数字保持在0到9范围内时有效。对于该范围之外的数字,字符表示由两个或更多字符组成。对于那些你应该使用String而不是char的人。 (A String也应对1位数案例......)

答案 1 :(得分:0)

您应首先将prevnxt转换为int值,然后将其添加到一起,如下所示:

if(listEqu.contains('+')) {
    while(listEqu.indexOf('+') > -1) {

            int plus = listEqu.indexOf('+');
            int prev = Integer.parseInt(listEqu.get(plus-1));
            int nxt = Integer.parseInt(listEqu.get(plus+1));
            Character sum = (char) (nxt + prev);

            listEqu.set(plus, sum);

            System.out.println(listEqu);

    }
}

答案 2 :(得分:0)

nxt和prev是char值。 Tey在ASCII表中取值,其中'1'为61,'b'为142(因此,'1'+'1'='b')

您需要减去'0'以获取它们代表的数字。 ('1' - '0'= 61 - 60 = 1)

总和不一定是一个字符可写的,所以你不应该把它放回一个char数组。

如果要将整数转换为字符串,请使用Integer.toString(i)。

(并且,如果你愿意,可以获取字符串的第一个字符并将其放入数组中,如果这是你想要的那样)

答案 3 :(得分:0)

在执行添加之前,需要将字符解析为相应的十进制值,然后再返回到字符。方法Character.digit(char, int)Character.forDigit(int, int)可以做到这一点(我会使用char,因为这是prevnxt的类型。像,

char prev = listEqu.get(plus - 1);
char nxt = listEqu.get(plus + 1);
Character sum = Character.forDigit(Character.digit(nxt, 10) 
        + Character.digit(prev, 10), 10);

答案 4 :(得分:0)

使用您的代码可以改善几件事情:

  1. 将字符1转换为等效的整数值:

    int prev = Integer.parseInt(String.valueOf(listEqu.get(plus-1)));
    int nxt = Integer.parseInt(String.valueOf(listEqu.get(plus+1)));
    // Note : int prev = listEqu.get(plus-1) would store an ascii value of `1` to prev value i.e 49
    
  2. 然后将这两个值的总和转换为Character,然后使用Character.forDigit将其添加到列表中:

    Character sum = Character.forDigit(nxt+prev,10);
    // Note Character sum = (char) (nxt + prev); is inconvertible
    // and char sum = (char) (nxt + prev); would store character with ascii value 98(49+49) in your case 'b' to sum