Java 如何添加存储在字符串中的数字(整数)
我必须创建一个使用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循环,将从右边开始的每个字符保存到一个字符串中。现在,我有一个字符串,从右边开始,每隔一个数字填充一个信用卡号。但是,我需要将该字符串中的所有数字相加,我无法计算出来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),则它是一个有效的信用卡号 我做了一个扫描
例如,如果用户输入1234作为卡号,则字符串everyotherdigit=42。如何将字符串中的4和2相加?有很多方法可以做到这一点。你可以通过谷歌搜索找到自己的解决方案 无论如何,这就是你能做的:
- 从字符串中获取单个字符,并将其转换为int
String cardNumber = "5490123456789128"; int value = cardNumber.charAt(0) - '0';
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;
}