繁体   English   中英

CS50 Credit:似乎找不到错误,

[英]CS50 Credit : cant seem to find the error,

程序总是输出“无效”。 我已经多次检查我的代码,但找不到错误。 我是 Java 的初学者,您的帮助将不胜感激。

我已经寻找了这个问题的所有可能的错误和不同的代码,但它仍然不起作用

package cs50;
import java.util.*;

public class Credit {

    int arr[];
    static long credit_card;

    public static void main(String[] args) {

        Scanner sc = new Scanner (System.in);

        System.out.println("Enter credit card number : ");
        credit_card = sc.nextLong();

        Credit obj = new Credit();

        int count = (int)obj.countDigits();

        obj.digitsToArray(count);

        int sum = obj.sum(count);

        obj.check(sum,count);

    }


    //count number of digits
    long countDigits()
    {
        long n = credit_card;
        int count = 0;

        while(n>0)
        {
            n=n/10;
            count++;
        }
        return count;
    }


    //store digits in an array
    void digitsToArray(int count)
    {
        long m = credit_card;
        arr = new int[count];

        for (int i=count-1; i>=0; i--)
        {
            arr[i] = (int)m % 10;
            m = m / 10;
        }
    }


    //Calculate sum of digits 
    int sum(int count)
    {
        int sum = 0;

        for (int i=count-2; i>=0; i=i-2)
        {
            int n = arr[i]*2;
            if(n>9) 
            {
                sum = sum + n%10 + (n/10 % 10);
            }
            else
                sum = sum + n;
        }

        for (int i=count-1; i>=0; i=i-2)
        {
            int n = arr[i];
            sum = sum + n;
        }
        return sum;
    }


    //Check credit card type
    void check(int sum, int count)
    {
        if (sum%10 == 0)
        {
            if(count==15 && (arr[0]==3 && (arr[1]==4||arr[1]==7)))
            {
                System.out.println("AMEX");
            }

            else if(count==16)
            {
                if(arr[0]==5 && (arr[1]==1||arr[1]==2||arr[1]==3||arr[1]==4||arr[1]==5))
                {
                    System.out.println("MasterCard");
                }
                else if(arr[0]==4)
                {
                    System.out.println("Visa");
                }

            }

            else if(count==13 && arr[0]==4)
            {
                System.out.println("Visa");
            }
        }
        else
            System.out.println("Invalid");
    }

}

签证或万事达卡号码不显示预期的输出,总是显示“无效”。

根据 lexicore 的建议,逐步执行您的代码,需要详细查看您的digitsToArray()方法。

提供信用卡号码:5105 1051 0510 5100

digitsToArray()方法将arr变量设置为: [5, 1, 0, 5, 1, 0, 5, 1, 0, 9, -1, -4, -9, 5, 8, 0]似乎是对的。

查看 lexicore 提供的链接,它将带您了解为什么以及如何使用它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM