2016-03-20 7 views
0

Visa veya MasterCard olup olmadığına bağlı olarak kredi kartı numarasını doğrulayan bir java programı oluşturmam gerekiyor. Kart numarasını her bir dört basamaklı (xxxx xxxx xxxx xxxx) arasındaki boşluklarla tek bir dize olarak okumam gerekiyor. 16 haneli olmalı. Sayıdaki tüm rakamlar toplam olmalıdır. Daha sonra, toplam% 10 = 0 ise geçerli bir Visa'dır. Toplam% 10 = 1 ise geçerli bir MasterCard'tır. Bu durumdan herhangi bir sapma geçersiz bir mesajla sonuçlanır.(Java) Sayıları tamsayılar halinde toplama ve bunları bir kredi kartı doğrulama algoritmasına uygulama konusunda yardıma ihtiyacınız var

Sorunum şu anki programımı çalıştırdığımda, sayıyı ve kart tipini girdiğimde programın durması ve devam etmemesidir. Burada ne yapıyorum emin değilim.

import java.util.Scanner; 
public class Assignment4 
{ 
    public static void main (String[] args) 
    { 
     String cardNum; 
     String typeAnswer; 
     char cardType; 
     int testSum; 
     int modResult; 

     Scanner scan = new Scanner (System.in); 

     System.out.println("\t\t Credit Card Verification"); 
     System.out.println("\t\t ========================"); 
     System.out.println("Enter your card number <xxxx xxxx xxxx xxxx>: "); 
     cardNum = scan.nextLine(); 

     if(cardNum.length()<19 || cardNum.length()>19) 
     { 
      System.out.println("Incorrect card number. Re-launch the program and enter a 16-digit card number"); 
      System.exit(0); 
     } 
     else 
     { 
     System.out.println("Is your card Visa or MasterCard?"); 
     typeAnswer = scan.next().toUpperCase(); 
     cardType = answer.charAt(0); 

     String numSet1 = cardNum.substring(0,4); 
     String numSet2 = cardNum.substring(5,9); 
     String numSet3 = cardNum.substring(10,14); 
     String numSet4 = cardNum.substring(15,19); 


     int i = Integer.parseInt(numSet1); 
     int j = Integer.parseInt(numSet2); 
     int k = Integer.parseInt(numSet3); 
     int l = Integer.parseInt(numSet4); 

     int sum1=0; 
     while(i>0) 
      { 
       sum1 = sum1 + (i%10); 
       i = i/10; 
      } 
     int sum2 = 0; 
     while(j>0) 
      { 
       sum2 = sum2 + (j%10); 
       j = j/10; 
      } 
     int sum3 = 0; 
     while(k>0) 
      { 
       sum3 = sum3+ (k%10); 
       k = k/10; 
      } 
     int sum4 = 0; 
     while(l>0) 
      { 
       sum4 = sum4 + (l%10); 
       j = j/10; 
      } 


     testSum = sum1 + sum2 + sum3 + sum4; 
     modResult = testSum%10 

     if(modResult=0 && cardType=V) 
     { 
      System.out.println("Valid Visa card."); 

     } 
     else if (modResult=1 && cardType=M) 
      { 
       System.out.println("Valid MasterCard."); 
      } 
      else 
      { 
       System.out.println("Not a valid " + typeAnswer + " card. Re-launch and try again."); 
      } 


     } 


    } 
} 
+3

Neden bu kod dünya üzerinde derleniyor? – MikeCAT

cevap

1
  • answer tanımlanmamıştır. typeAnswer olmalıdır.
  • modResult = testSum%10'dan sonra noktalı virgül eksik. if tablolara
  • koşullar yanlıştır: İlkel türleri değerleri karşılaştırmak için
    • Kullanım == operatör değil = operatörü. veve 'M' tanımlanmamış sembolleri V ve M yerine kullanın.
  • l, 4. döngüde güncellenmez, bu nedenle 4. sayı pozitifse sonsuz bir döngü olacaktır. j = j/10;, l = l/10; olmalıdır.

bu deneyin: Bu programda düzeltilmesi daha sorunlar olduğunu

import java.util.Scanner; 
public class Assignment4 
{ 
    public static void main (String[] args) 
    { 
     String cardNum; 
     String typeAnswer; 
     char cardType; 
     int testSum; 
     int modResult; 

     Scanner scan = new Scanner (System.in); 

     System.out.println("\t\t Credit Card Verification"); 
     System.out.println("\t\t ========================"); 
     System.out.println("Enter your card number <xxxx xxxx xxxx xxxx>: "); 
     cardNum = scan.nextLine(); 

     if(cardNum.length()<19 || cardNum.length()>19) 
     { 
      System.out.println("Incorrect card number. Re-launch the program and enter a 16-digit card number"); 
      System.exit(0); 
     } 
     else 
     { 
      System.out.println("Is your card Visa or MasterCard?"); 
      typeAnswer = scan.next().toUpperCase(); 
      cardType = typeAnswer.charAt(0); 

      String numSet1 = cardNum.substring(0,4); 
      String numSet2 = cardNum.substring(5,9); 
      String numSet3 = cardNum.substring(10,14); 
      String numSet4 = cardNum.substring(15,19); 


      int i = Integer.parseInt(numSet1); 
      int j = Integer.parseInt(numSet2); 
      int k = Integer.parseInt(numSet3); 
      int l = Integer.parseInt(numSet4); 

      int sum1=0; 
      while(i>0) 
      { 
       sum1 = sum1 + (i%10); 
       i = i/10; 
      } 
      int sum2 = 0; 
      while(j>0) 
      { 
       sum2 = sum2 + (j%10); 
       j = j/10; 
      } 
      int sum3 = 0; 
      while(k>0) 
      { 
       sum3 = sum3+ (k%10); 
       k = k/10; 
      } 
      int sum4 = 0; 
      while(l>0) 
      { 
       sum4 = sum4 + (l%10); 
       l = l/10; 
      } 


      testSum = sum1 + sum2 + sum3 + sum4; 
      modResult = testSum%10; 

      if(modResult==0 && cardType=='V') 
      { 
       System.out.println("Valid Visa card."); 
      } 
      else if (modResult==1 && cardType=='M') 
      { 
       System.out.println("Valid MasterCard."); 
      } 
      else 
      { 
       System.out.println("Not a valid " + typeAnswer + " card. Re-launch and try again."); 
      } 

     } 

    } 
} 

Not. Örneğin, bu program geçerli bir Visa kartı olarak -123 -456 -789 -147 kabul eder.

0

Satırda: cardType=answer.charAt(0); Bir hata oluştu. Değişken cevap tanımsızdır. cardType=typeAnswer.charAt(0); olmalıdır. Bir sonsuz döngü oluşturdunuz, yani. dördüncü döngü Başka bir hata, if deyiminde eşitliği kullanmıyor olsaydınız, bunun yerine değişkenlere değerler ataıyordunuz. şöyle doğru kod olacaktır:

import java.util.*; 
import java.io.*; 
public class CreditCardVerification 
{ 
    public static void main (String[] args) 
    { 
     String cardNum; 
     String typeAnswer; 
     char cardType; 
     int testSum=0; 
     int r; 
     int modResult; 
     Scanner scan = new Scanner (System.in); 
     System.out.println("\t\t Credit Card Verification"); 
     System.out.println("\t\t ========================"); 
     System.out.println("Enter your card number <xxxx xxxx xxxx xxxx>: "); 
     cardNum = scan.nextLine(); 
     if(cardNum.length()<19 || cardNum.length()>19) 
     { 
      System.out.println("Incorrect card number. Re-launch the program and enter a 16-digit card number"); 
      System.exit(0); 
     } 
     else 
     { 
      System.out.println("Is your card Visa or MasterCard?"); 
      typeAnswer = scan.next().toUpperCase(); 
      cardType = typeAnswer.charAt(0);     
      String numSet1 = cardNum.substring(0,4); 
      String numSet2 = cardNum.substring(5,9); 
      String numSet3 = cardNum.substring(10,14); 
      String numSet4 = cardNum.substring(15,19); 
      int i = Integer.parseInt(numSet1); 
      int j = Integer.parseInt(numSet2); 
      int k = Integer.parseInt(numSet3); 
      int l = Integer.parseInt(numSet4); 
      int sum1=0; 
      while(i!=0) 
      { 
       sum1 = sum1 + (i%10); 
       i = i/10; 
      } 
      int sum2 = 0; 
      while(j!=0) 
      { 
       sum2 = sum2 + (j%10); 
       j = j/10; 
      } 
      int sum3 = 0; 
      while(k!=0) 
      { 
       sum3 = sum3+ (k%10); 
       k = k/10; 
      } 
      int sum4 = 0; 
      while(l!=0) 
      { 
       sum4 = sum4 + (l%10); 
       l = l/10; 
      } 
      testSum = sum1 + sum2 + sum3 + sum4; 
      modResult = testSum%10;      
      if((modResult==0) && (cardType=='V')) 
      { 
       System.out.println("Valid Visa card.");    
      } 
      else if ((modResult==1) && (cardType=='M')) 
      { 
       System.out.println("Valid MasterCard."); 
      } 
      else 
      { 
       System.out.println("Not a valid " + typeAnswer + " card. Re-launch and try again."); 
       System.exit(0); 
      } 
     } 
    } 
}` 

mikecat tarafından verilen kodundan çok farklı değil bu code.Its deneyin ama bu sorunu çözmek gerekir. Sadece herhangi bir sayı girmeyen ve kodu test etmeden dikkatli olun. Geçerli bir Visa veya MasterCard kredi kartı ile deneyin.

İlgili konular