2012-12-13 56 views
1

我在写信用卡验证程序。我试图查看一个产品是否长于1位数(即:10),如果是我需要将这两个整数加在一起。例如10将是1 + 0,等于1,我该怎么做?如何在一个数字中添加两个整数

这是我到目前为止有:

public class CreditCard{ 
public static void main(String args[]){ 

    //Take in a 16 digit credit card number 
    Scanner in=new Scanner (System.in); 
    int num[]=new int[16]; 
    int i=0; 


    for (i=0;i<num.length;i++) { 
     System.out.println("Please enter a 16 digit credit card number"); 
     num[i]=in.nextInt(); 

    } 
    if (num.length < 16 || num.length > 16) 
     { 
      System.out.println("Invalid"); 
     } 
    else 
    { 

     //multiply every other number by 2, starting with place 16, and find the sum(sum1) 
     int num1 = (num[16] * 2); 
     int num2 = (num[14] * 2); 
     int num3 = (num[12] * 2); 
     int num4 = (num[10] * 2); 
     int num5 = (num[8] * 2); 
     int num6 = (num[6] * 2); 
     int num7 = (num[4] * 2); 
     int num8 = (num[2] * 2); 

     if(num1 > 9) 

     int sum1 = (num[16] * 2) + (num[14] * 2) + (num[12] * 2) + (num[10] * 2) + (num[8] * 2) + (num[6] * 2) + (num[4] *2) + (num[2] *2); 
     int sum2 = (num[15] + num[13] + num[11] + num[9] + num[7] + num[5] + num[3] + num[1]); 

     int totalSum = sum1 + sum2; 
     if (totalSum % 10 != 0) 
     { 
      System.out.println("Invalid card number!!"); 
     } 
     else 

     { 
      System.out.println(" Valid Credit Card Number!!"); 


     } 

     }  
} 
} 
+2

所以你问如何将'“123”'转换为'1 + 2 + 3 = 6'? – Blender

回答

0

我认为,一个简单的办法是

if (num1 > 9) num1 = num1-9 

如果你看一下原来的数字由2

num num*2 result 
0 0  0 
1 2  2 
2 4  4 
3 6  6 
4 8  8 
5 10  1 
6 12  3 
7 14  5 
8 16  7 
9 18  9 
+0

好的,但我不得不将num1的类型更改为布尔值。如何将布尔值实现为我的程序的开头 – mdt

+0

@mdt - 抱歉,我错误地放置了右括号。我已经编辑来纠正这一点。 – hatchet

+0

我的代码仍然有错误,我相信这是因为我的输入。如何让用户输入16位数字,然后将这些数字用于计算 – mdt

0

如果Blender的评论是正确的,你可以做这样的:

int num=123; // or whatever 
String str=Integer.toString(num); 
int total=0; 
if(str.length()>1){ 
    for(int i=0; i<str.length(); i++){ 
     total+=Integer.parseInt(str.charAt(i)); 
    } 
} 
System.out.println(total); 

(我没有跑这一点,所以有可能是一些错误在那里)

2

而不是重新发明轮子,你可以看看Luhn algorithm这是一个广泛使用的校验和算法,用于验证信用卡号码。这是一个Java version

+0

谢谢,但我不太明白。 – mdt

0

相乘后怎么看,我认为你的代码来计算总应该这工作be

int totalSum = 0; 
for (i=0; i<num.length; i+=2) { 
    totalSum+=num[i+1]; 
    if (num[i+2]>4) { 
     totalSum+=1+((num[i+2]*2) % 10); 
    } else { 
     totalSum+=num[i+2]*2; 
    } 
} 

这可以避免任何缓慢的字符串转换。