如何添加存储在字符串中的数字(整数)

时间:2015-02-14 19:27:38

标签: java string algorithm

我必须创建一个使用Luhn算法检查信用卡是否有效的程序。

算法是:

形成每个其他数字的总和,包括最右边的数字;所以 5490123456789128总和为8 + 1 + 8 + 6 + 4 + 2 + 0 + 4 = 33 每个剩余数字形成两倍,然后将创建它的所有数字相加;我们示例中的其余数字(5 9 1 3 5 7 9 2)加倍到10 18 2 6 10 14 18 4,其总和为1 + 0 + 1 + 8 + 2 + 6 + 1 + 0 + 1 + 4 + 1 + 8 + 4 = 37 加上上面两个总和(33 + 37 = 70) 如果结果是10的倍数(即,它的最后一位数是0)那么它就是一个有效的信用卡号。

我制作了扫描仪,并将信用卡号码保存到字符串卡号中 然后我创建了一个while循环,将从右边开始的每个其他字符保存到一个字符串中。所以现在,从右边开始,我的信用卡号码的每个其他数字都填充了一个字符串。但是,我需要将该字符串中的所有数字相加,这是我无法弄清楚的。

例如,如果用户输入1234作为卡号,则字符串everyotherdigit = 42.如何在字符串中添加4和2?

4 个答案:

答案 0 :(得分:0)

有很多方法可以做到这一点。你可以通过谷歌搜索来找到自己的解决方案。

无论如何,这是你可以做的:

  • 从字符串中获取单个字符,并将它们转换为int。

    String cardNumber = "5490123456789128";
    int value = cardNumber.charAt(0) - '0';
    

使用for循环并将0更改为x(循环计数器)将解决所有问题。

  • 获取单个字符串并转换为int。

    String cardNumber = "5490123456789128";
    int value = Integer.parseInt(cardNumber.substring(0,1));   
    

答案 1 :(得分:0)

所以这样的事情对你有用:

        public static void main(String[] args) 
{
    String cardNum = "5490123456789128";
    String others = null;
    int evenDigitSum = 0;
    int oddDigitTransformSum = 0;

    for (int pos = 0; pos < cardNum.length(); pos++)
    {
        if ((pos%2) != 0)
        {
            evenDigitSum +=  (cardNum.charAt(pos) - '0');
        }
        else
        {
            others = Integer.toString((cardNum.charAt(pos)-'0')*2);

            for (char c : others.toCharArray())
            {
                oddDigitTransformSum += (c-'0');
            }
        }

    }

    System.out.println("Odds: " + oddDigitTransformSum);
    System.out.println("Evens: " + evenDigitSum);
    System.out.println("Total: " + (evenDigitSum+oddDigitTransformSum));
    System.out.println("Valid Card: " + ((evenDigitSum+oddDigitTransformSum)%10==0));
}

答案 2 :(得分:0)

我会将字符串视为char的数组,并使用Character.digit(int, int)将每个字符转换为相应的int

public static boolean isValidCreditCard (String s);
    char[] arr = s.toCharArray();

    int everyOtherSum = 0;
    for (int i = arr.length - 1; i >= 0; i -= 2) {
        everyOtherSum += Character.digit(arr[i], 10);
    }

    int doubleSum = 0;
    for (for (int i = arr.length - 2; i >= 0; i -= 2) {
        int currDigit = Character.digit(arr[i], 10);
        int doubleDigit = currDigit * 2;
        while (doubleDigit > 0) {
            doubleSum += (doubleDigit % 10);
            doubleDigit /= 10;
        }
    }

    int total = everyOtherSum + doubleSum;
    return total % 10 == 0;
}

答案 3 :(得分:0)

public int cardCount(String numbers){
    Stack<Integer> stack = new Stack<>();
    int count = 0;
    for(char c : numbers.toCharArray()){
        stack.push(Character.getNumericValue(c));
    }
    int size = stack.size();
    for(int i=1;i <= size; i++){
        if(i%2 != 0){
            count = count + stack.pop();
        }else{
            stack.pop();
        }

    }
    return count;
}

这只是你所要求的,而不是整个算法