我正在尝试自己学习Java,但我遇到了一个不太理解的问题。我试图编写一个程序来计算交叉和。 我的想法是将输入的数字分成一个char
数组,然后简单地运行数组并计算总和。
这是我所拥有的:
public static int calcCrossSum (long number){
int sum = 0;
char[] charArray = String.valueOf(number).toCharArray();
for( int i = 0; i < charArray.length; i++){
sum += charArray[i];
}
return sum;
}
如果我用数字 123 尝试这种方法,我会得到 150 结果,我不知道为什么。我尝试使用调试器,似乎我的变量test
向自身添加了奇怪的数字,即使调试器显示数组的内容似乎是正确的。
如果有人能向我解释我做错了什么以及这些数字来自哪里,我将不胜感激。如果有任何不清楚的地方,我很乐意尝试添加更多信息。
字符具有与之关联的整数值。 你应该这样做:
public static int calcCrossSum (long number){
int sum = 0;
char[] charArray = String.valueOf(number).toCharArray();
for( int i = 0; i < charArray.length; i++){
sum += Integer.parseInt(("" + charArray[i]));
}
return sum;
}
问题是您正在添加字符,但您必须添加整数。因为+
char
的操作数将始终为您提供其 unicode 值的总和。
而是找到你可以做的数字总和
public static int calcCrossSum (long number){
int sum = 0;
while ( number > 0 )
{
sum += number % 10;
number /= 10;
}
return sum;
}
演示
你正在用每个字符的 unicode 值做一个总和。值为"1"= 49,"2"= 50,"3"= 51。
如果你想用 unicode 值做一个总和并得到每个字符的实际值,你可以做一个这样的函数:
public static int charToInt(char c){
return (int) c - 48; //48 is the value of '0'
}
并调用函数:
public static int calcCrossSum (long number){
int sum = 0;
char[] charArray = String.valueOf(number).toCharArray();
for( int i = 0; i < charArray.length; i++){
sum += charToInt(charArray[i]);
}
return sum;
}
您可以在此处查找每个值的 unicode 值
这是我的解决方案,我相信你可以让它更简单,但你去吧:
public static int cross_sums(int input) {
int output = 0;
do {
output += input % 10;
input /= 10;
} while (input > 0);
if (output > 9) {
output = cross_sums(output);
}
return output;
}