这些数字从何而来



我正在尝试自己学习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;
}

最新更新