[英]Wrong answer when multiplying variables
我试图将两个变量相乘。 一个是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
为什么它不能正确倍增?
问题是char
7
的数值不是7
而是55
。
因为在Java中,char数据类型是单个16位Unicode字符(请参阅下面的编码表)。
如果你看一下这个表,你会看到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
试试这样:
currProduct *= (int) array[x];
请在这里为了什么char值通常代表。 你会看到如果你想让你的char保持数值2,你必须实际分配50:
char two = 50;
System.out.println(two); // prints out 2
'7'的值是55,因为它只是另一个字符,例如'a',因此它的数值将是它的ASCII码。 见这里: http : //www.asciitable.com/
(请注意,使用的ASCII表也可以依赖于实现。)
'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
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.