java - (Java) 需要帮助对整数组中的数字求和并将其应用于信用卡验证算法

标签 java loops while-loop

我必须创建一个 java 程序,根据信用卡号是 Visa 卡还是 MasterCard 来验证信用卡号。我需要将卡号读取为单个字符串,每组四位数字之间有空格 (xxxx xxxx xxxx xxxx)。必须有 16 位数字。数字中的所有数字必须相加。那么,如果sum%10=0,则为有效签证。如果 sum%10=1,则为有效的万事达卡。任何偏离此结果都会导致无效消息。

我的问题是,一旦我运行当前的程序,我输入号码和卡类型,然后程序就会停止并且不会继续。我不确定我在这里做错了什么。

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.");
            }


        }


    }
}

最佳答案

  • answer 未定义。应该是 typeAnswer
  • modResult = testSum%10 后面缺少分号。
  • if 语句中的条件错误:
    • 使用 == 运算符(而不是 = 运算符)来比较基元类型的值。
    • 使用字 rune 字 'V''M' 而不是 undefined symbol VM
  • l 在第 4 个循环中没有更新,因此如果第 4 个数字为正数,则将是无限循环。 j = j/10; 应该是 l = l/10;

试试这个:

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.");
            }

        }

    }
}

请注意,该程序还有更多问题需要修复。例如,该程序接受 -123 -456 -789 -147 作为有效的 Visa 卡。

关于java - (Java) 需要帮助对整数组中的数字求和并将其应用于信用卡验证算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36110258/

相关文章:

Javascript 循环 & setInterval

php - Run While 循环遍历列的所有不同值

C 初学者 : How to search for particular words in a file (line by line) in C

java - Cordova 不适用于 Java 9。如何仅为 Cordova 设置特定的 jdk?

java - 这种反转链表的方法有问题吗

java - 当 MDB 尝试连接到远程队列时,WebSphere 8 中出现异常

php - AJAX 添加到购物车按钮不适用于自定义查询循环产品 woocommerce

c - 在 C 中根据条件实现循环

Windows 批处理文件 : Loop on rows and split string

Java:解析文本文件有什么想法吗?