Java CS50学分:似乎找不到错误,

Java CS50学分:似乎找不到错误,,java,Java,程序总是输出“无效”。我已多次检查代码,但找不到错误。我是java初学者,非常感谢您的帮助 我已经寻找了所有可能的错误和这个问题的不同代码,但它仍然不起作用 package cs50; import java.util.*; public class Credit { int arr[]; static long credit_card; public static void main(String[] args) { Scanner sc = n

程序总是输出“无效”。我已多次检查代码,但找不到错误。我是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");
    }

}

visa或mastercard号码不显示预期输出,始终显示“无效”。

根据lexicore的建议,需要仔细查看您的
digitsToArray()
方法

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

digitsToArray()
方法将
arr
变量设置为:
[5,1,0,5,1,1,0,9,-1,-4,-9,5,8,0]
,这似乎不正确

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