2012-12-13 91 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; 
    } 
} 

這可以避免任何緩慢的字符串轉換。