乘法变量时的错误答案

时间:2013-12-01 22:15:52

标签: java math

我试图将两个变量相乘。一个是int,另一个是char数组。

我的代码就是这个

int biggestProduct = 1;
int currProduct = 1;
char[] array = num.toCharArray();

for (int x = 0; x < array.length; x++) {
    if (x < 5) {
        System.out.println(currProduct + " * " + array[x] + " = " + currProduct * array[x]);
        currProduct *= array[x];
    }
}

return biggestProduct;

问题在于currProduct*= array[x]

打印出来时,这是我的输出:

1 * 7 = 55
55 * 3 = 2805
2805 * 1 = 137445
137445 * 6 = 7422030
7422030 * 7 = 408211650

为什么它不能正确倍增?

4 个答案:

答案 0 :(得分:8)

问题是char 7的数值不是7而是55

因为在Java中,char数据类型是单个16位Unicode字符(请参阅下面的编码表)。

enter image description here

如果您查看此表,您会看到7编码为0x0037 = 3*16^1 + 7 = 55

如果您想获取角色的实际数值,可以使用Character.getNumericValue(char ch)

 char ch = '7';
 int number = Character.getNumericValue(ch);
 System.out.print(number); //print 7

因此,要编辑代码,它将如下所示:

        String num = "73167";
        int biggestProduct = 1;
        int currProduct = 1;
        char[] array = num.toCharArray();

        for (int x = 0; x < array.length; x++) {
            if (x < 5) {
                System.out.println(currProduct + " * " + array[x] + " = " + currProduct * Character.getNumericValue(array[x]));
                currProduct *= Character.getNumericValue(array[x]);
            }

        }

输出:

1 * 7 = 7
7 * 3 = 21
21 * 1 = 21
21 * 6 = 126
126 * 7 = 882

验证:7*3*1*6*7 = 882

答案 1 :(得分:1)

试试这样:

currProduct *= (int) array[x];

检查here char值通常代表的含义。你会看到如果你想让你的char保持数值2,你必须实际分配50:

char two = 50;
System.out.println(two); // prints out 2

答案 2 :(得分:1)

'7'的值是55,因为它只是另一个字符,例如'a',因此其数值将是其ASCII码。见这里:http://www.asciitable.com/
(请注意,使用的ASCII表也可以依赖于实现。)

答案 3 :(得分:1)

'7'的数值不是7,它是55.这就像任何字符一样,例如字符'A'是65

例如

public class Calendar
{
    public static void main(String[] args){
        char testChar='7';
        int testInt=testChar;

        System.out.println(testInt); //prints 55
    }
}