我如何将同一数组中的两个 int 彼此相加并将它们转换为 int。在 Luhn 算法中

How would I add two int that are in the same array to each other and convert them into an int. In the Luhn Algorithm

我正在尝试将数组的两个部分相加以生成一个 int 值。我正在使用 Luhn 算法来确定信用卡是有效的信用卡。我们只使用 6 位信用卡号,以确保没有人输入真实的信用卡号。我感到困惑的部分是当我拆分一个大于 10 的数字并将其加在一起时。例如,如果算法给我 12,我需要将它分成 1 和 2,然后将它们加在一起等于 3。我相信我目前正在代码中拆分它,但是当我将它们加在一起时,我得到了一些数字从那以后就没有了。这是一段代码,其中有一些注释。

我在某些地方打印了数字,让自己看看在某些地方发生了什么。我还添加了一些评论,说打印出的数字是预期的,以及一些关于什么时候没有我预期的评论

int[] cardNumber = new int[]{ 1,2,3,4,5,5};
    int doubleVariablesum = 0;
    int singleVariablesum = 0;
    int totalSum = 0;
    int cutOffVar = 0;
    String temp2;
    for (int i = cardNumber.length - 1; i >= 0;) { 
        int tempSum = 0;
        int temp = cardNumber[i];
        temp = temp * 2;
        System.out.println("This is the temp at temp * 2: " + temp);
        temp2 = Integer.toString(temp);
        if (temp2.length() == 1) { 
            System.out.println("Temp2 char 0: "+ temp2.charAt(0));
            // this prints out the correct number  
            // Example: if there number should be 4 it will print 4

            tempSum = temp2.charAt(0);  
            System.out.println("This is tempSum == 1: " + tempSum);
            // when this goes to add temp2.charAt(0) which should be 4 it prints out                      //something like 56

        } else {
            System.out.println("TEMP2 char 0 and char 1: " + temp2.charAt(0) + " " + temp2.charAt(1));

// 成功打印出正确的数字

            tempSum = temp2.charAt(0) + temp2.charAt(1);
            System.out.println("This is tempSum != 1: " + tempSum);
            // but here it when I try to add them together it is giving me something 
            // like 97 which doesn't make since for the numbers I am giving it
        }
        doubleVariablesum = tempSum + doubleVariablesum;
        System.out.println("This is the Double variable: " + doubleVariablesum);
        System.out.println();
        i = i - 2;
    }

由于您将数字转换为字符串以拆分整数,然后尝试将它们加在一起。您实际上是将两个字符的数值加在一起,这就是奇数。您需要将其转换回整数,您可以使用 Integer.parseInt(String.valueOf(temp2.charAt(0)))

添加 char 符号时 '0''1' 添加它们的 ASCII 值 - 而不是数字 01.

将数字符号转换为int时,可以使用方法Character::getNumericValue或减去'0'

但是,也可以计算 2 位数字的总和,而无需像这样转换为字符串和字符操作:

int sum2digits = sum / 10 + sum % 10; // sum / 10 always returns 1 if sum is a total of 2 digits

似乎 charAt() 类型转换为整数值,但 ascii 类型。因此,对于字符“0”和“1”,返回数字 48 和 49,总和为 97。要解决此问题,您可以将 temp2 分配给 (temp / 10) + (temp % 10)。它实际上拆分了一个两位数的整数并将它们的总和相加。

在处理char和String时需要注意以下几点

  1. charAt(index) 的结果赋给一个 int 将赋给 ASCII 值而不是实际的整数值。要获得实际值,您需要 String.valueOf(temp2.charAt(0)).

  2. 连接 char 的结果是 ASCII 值的总和。 例如,如果 char c = '1'; System.out.println(c + c); 将打印 "98" 而不是 "11"。 但是 System.out.println("" + c + c); 将打印 "11"。请注意 """ 将强制字符串连接。