Java 我如何修改我的信用卡验证器程序,只检查我上次检查卡类型的函数中的有效数字?

Java 我如何修改我的信用卡验证器程序,只检查我上次检查卡类型的函数中的有效数字?,java,function,boolean,credit-card,luhn,Java,Function,Boolean,Credit Card,Luhn,公共类程序{ // Global variables to be use in the whole program public static int numOfInvalids = 0 , visaNum=0 ; public static void main(String[] args) { Scanner userInput = new Scanner(System.in) ; System.out.println("How man

公共类程序{

// Global variables to be use in the whole program
public static int numOfInvalids = 0 , visaNum=0 ; 



public static void main(String[] args) 
{
    
    Scanner userInput = new Scanner(System.in) ;
    

    System.out.println("How many credit card you want to check?");
    int numOfCredit = userInput.nextInt() ;
    
    int creditnumbers[] = new int[numOfCredit] ;
    
    for (int i = 0 ; i<numOfCredit ; i++)
    {
        System.out.println("Enter credit card number "+(i+1)+": ") ;
        String creditNumber = userInput.next() ;
        
        // checks if number is a credit number or not
        
        if (creditNumber.length()<16 || creditNumber.length()>19)            
        {
            System.out.println("Not a credit card number!") ;
            prog.numOfInvalids ++ ;  // count number of invalid card numbers
            
            System.out.println();
            continue ;
        }
        
        checkValid(creditNumber);
        checkType(creditNumber) ;
        // calls function 

    }
    System.out.println("Number of invalid: "+prog.numOfInvalids) ;
    System.out.println("Number of visa credit card: "+prog.visaNum) ;
    
    
}



private static boolean checkValid(String cardNumber)        // function to check if card number is valid or not 
{
    int cardlength = cardNumber.length();
    int evenSum = 0, oddSum = 0, sum;
    
    
    for (int i = cardlength - 1; i >= 0; i--)  //looping from the right 
    {
        int digit = Character.getNumericValue(cardNumber.charAt(i));  // Character.getNumericValue = convert char to integer
        
        if (i % 2 == 0)  // taking every 2nd digits from the right e.g 2nd..4th..6th..8th etc.
        {
            int multiplyByTwo = digit * 2;     // multiply each 2nd digits by 2
            
            if (multiplyByTwo > 9)  // Add two digits to handle cases that make two digits after doubling  e.g (6 * 2 = 12) = 1 + 2
            {
                
                String doubleDigits = String.valueOf(multiplyByTwo);  // convert double digit to String for use of charAt function
                multiplyByTwo = Character.getNumericValue(doubleDigits.charAt(0)) + Character.getNumericValue(doubleDigits.charAt(1));   //convert each character to integer and add them together
            }
            
            evenSum += multiplyByTwo;  // add product digits together
            
            } 
        
        else 
        {
            oddSum += digit;      // Add sum of digits that weren’t multiplied by 2
        }
    }
    
    sum = evenSum + oddSum;   //Adding both sums together
    
    if (sum % 10 == 0)       //if sum is multiple of 10 , it is valid 

    {
        
        System.out.println("valid card");
        System.out.println();
        return true;    
       
    } 
    
    else
    {
        System.out.println("invalid card") ; 
        prog.numOfInvalids ++ ; // count the number of invalid card numbers
        System.out.println();
        return false;
        
    }
}

private static boolean checkType(String cardNumber) // function to check card type 
{
    


    if ( (cardNumber.charAt(0)=='4') && cardNumber.length()==13 || cardNumber.length()==16 )  //checking first character and length of card number
            {
                System.out.println("VISA");
                visaNum ++ ; // counting number of visa cards 
                return true;    
            } 
            
            else
            {
           
                return false;
            }
//要在整个程序中使用的全局变量
公共静态int numovalids=0,visaNum=0;
公共静态void main(字符串[]args)
{
扫描仪用户输入=新扫描仪(System.in);
System.out.println(“您要检查多少张信用卡?”);
int numOfCredit=userInput.nextInt();
int creditnumbers[]=新int[numOfCredit];
for(int i=0;i=0;i--)//从右侧循环
{
int digit=Character.getNumericValue(cardNumber.charAt(i));//Character.getNumericValue=将字符转换为整数
if(i%2==0)//从右边每隔2位数取一次,例如第2..4..6..8等。
{
int multiplyByTwo=数字*2;//将每2位数字乘以2
if(multiplyByTwo>9)//添加两位数以处理在加倍后生成两位数的情况,例如(6*2=12)=1+2
{
String doubleDigits=String.valueOf(multiplyByTwo);//将两位数转换为字符串以使用charAt函数
multiplyByTwo=Character.getNumericValue(doubleDigits.charAt(0))+Character.getNumericValue(doubleDigits.charAt(1));//将每个字符转换为整数并相加
}
evenSum+=multiplyByTwo;//将乘积数字相加
} 
其他的
{
oddSum+=数字;//将未乘以2的数字相加
}
}
sum=evenSum+oddSum;//将两个和相加
if(sum%10==0)//如果sum是10的倍数,则它是有效的
{
System.out.println(“有效卡”);
System.out.println();
返回true;
} 
其他的
{
System.out.println(“无效卡”);
prog.numovalids++;//计算无效卡号的数量
System.out.println();
返回false;
}
}
private static boolean checkType(String cardname)//用于检查卡类型的函数
{
if((cardname.charAt(0)='4')&&cardname.length()==13 | | cardname.length()==16)//检查卡号的第一个字符和长度
{
System.out.println(“VISA”);
visaNum++;//统计visa卡的数量
返回true;
} 
其他的
{
返回false;
}
} }

我只想从第一个函数“check valid”到最后一个函数“check type”检查有效卡的卡类型

是否有任何方法可以保存第一个函数中的有效数字并在“Check Type”函数中使用它们

我只想从第一个函数“check valid”到最后一个函数“check type”检查有效卡的卡类型

是否有任何方法可以保存第一个函数中的有效数字,并在“检查类型”函数中使用它们?

基于问题的假设
  • 仅需要推断有效卡的卡类型
  • 无法更改函数返回类型
  • 可能的方法
  • 添加
    if
    检查
    checkValid
    的响应,如果为true,则调用
    checkType
  • if(检查有效(creditNumber){
    支票类型(信用编号);
    }
    
    暗示
  • 无论此解决方案如何,请在编码和提问时改进格式,因为这将帮助其他人更好地理解问题

  • 为什么你不能使用regex来验证信用卡号码?你可以检查这个SO链接。这回答了你的问题吗?我想通过检查号码来保持简单我应该把它放在哪里?这应该取代现有的调用
    main
    。我真诚地请求你学习java的基础知识,因为它将帮助你解决这些问题你自己提问,最终会增加对该主题的兴趣。祝你愉快。感谢你的帮助。最后一个问题:我应该添加“if checkValid(creditNumber)=true”还是让它像你写的那样不管怎样都可以。这是你个人的偏好。通常我写
    if(someboolfunc())
    用于
    true
    if(!someboolfunc())
    用于
    false