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

Java 如何添加存储在字符串中的数字(整数),java,string,algorithm,Java,String,Algorithm,我必须创建一个使用Luhn算法检查信用卡是否有效的程序 算法如下: 形成其他每个数字的总和,包括最右边的数字;所以 5490123456789128和8+1+8+6+4+2+0+4=33 将每个剩余数字加倍,然后将创建该数字的所有数字相加;我们示例中的剩余数字(59135792)加倍为101826101484,总和为1+0+1+8+2+6+1+0+1+4+1+8+4=37 将上述两个总和相加(33+37=70) 如果结果是10的倍数(即,其最后一位为0),则它是一个有效的信用卡号 我做了一个扫描

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

算法如下:

形成其他每个数字的总和,包括最右边的数字;所以 5490123456789128和8+1+8+6+4+2+0+4=33 将每个剩余数字加倍,然后将创建该数字的所有数字相加;我们示例中的剩余数字(59135792)加倍为101826101484,总和为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相加?

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

无论如何,这就是你能做的:

  • 从字符串中获取单个字符,并将其转换为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));   
    

这样的东西对你来说很有用:

        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));
}
publicstaticvoidmain(字符串[]args)
{
字符串cardNum=“5490123456789128”;
字符串others=null;
int-evenDigitSum=0;
int odddigittransferormsum=0;
对于(int pos=0;pos
我将字符串视为
字符的数组,并使用将每个字符转换为对应的
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;
}
public int cardCount(字符串编号){
堆栈=新堆栈();
整数计数=0;
for(字符c:numbers.toCharArray()){
stack.push(Character.getNumericValue(c));
}
int size=stack.size();

对于(int i=1;我可以发布您迄今为止尝试过的相关代码片段吗?提示:尝试使用Character.digit。提示:在
'0'
'9'
范围内的任何字符
c
的数值都可以通过
c-'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;
}