当前位置: 首页 > 知识库问答 >
问题:

我如何用连字符(“-”)测试信用号码,使其无效。当我尝试4003-6000-0000-0014时,我遇到了错误

归翔
2023-03-14

我无法获得包含处女膜的信用卡号码,因为INVALID,例如4003-6000-0000-0014必须给我INVALID,但它给我字符串错误。

公共类程序 {

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() ;
        
        validateCreditCardNumber(creditNumber);
        
        
    }
}


private static void validateCreditCardNumber(String str) { // function to check credit numbers

    int[] ints = new int[str.length()];
    for (int i = 0; i < str.length(); i++) {
        ints[i] = Integer.parseInt(str.substring(i, i + 1));
    }
    for (int i = ints.length - 2; i >= 0; i = i - 2) {
        int j = ints[i];
        j = j * 2;
        if (j > 9) {
            j = j % 10 + 1;
        }
        ints[i] = j;
    }
    
    
    int sum = 0;
    for (int i = 0; i < ints.length; i++) 
    {
        sum += ints[i];
    }
    if (sum % 10 == 0) 
    {
        System.out.println("VALID");
    } 
    
    else 
    {
        System.out.println("INVALID");
    }
}

}

我用处女膜跑步后出现以下错误:

线程“main”java.lang.NumberFormatException中出现异常:对于输入字符串“-”,位于java.base/java.lang_NumberFormationException.forInputString(NumberFormatExcemption.java:68),位于java.gase/java.lag.Integer.parseInt(Integer.java:642),位于testing/testing.prog.validateCreditCardNumber(prog.java:33),位于测试/测试.prog.main(prog.java:22)

共有1个答案

齐承泽
2023-03-14

可以将字符串“-”替换为“”(空白),然后应用此函数:

    String card = "4003-6000-0000-0014";

    Boolean t = check(card.replace("-",""));

    public static boolean check(String ccNumber)
    {
        int sum = 0;
        boolean alternate = false;
        for (int i = ccNumber.length() - 1; i >= 0; i--)
        {
            int n = Integer.parseInt(ccNumber.substring(i, i + 1));
            if (alternate)
            {
                n *= 2;
                if (n > 9)
                {
                    n = (n % 10) + 1;
                }
            }
            sum += n;
            alternate = !alternate;
        }
        return (sum % 10 == 0);
    }
 类似资料:
  • 我在测试包中编写了此测试,用于测试类,但即使在测试开始之前,除了中未知的“常量”之外,此错误显示为: 错误是: 注释处理器现在必须显式声明。发现编译类路径上的以下依赖项包含注释处理器。auto-service-1.0-rc4.jar(com.google.auto.service:自动服务:1.0-rc4)或者,设置android.defaultConfig.javaCompileOptions.

  • 运行以下代码: 给出以下错误:

  • My AccountEntityToAccount方法出现错误,返回类型Transaction是抽象类或接口。提供非抽象/非接口结果类型或工厂方法。AccountEntityToAccount(AccountEntity AccountEntity); 我怎样才能解决这个问题。我的事务类应该是抽象的,我无法更改抽象关键字

  • 启动层java初始化期间发生错误。朗,模块。FindException:无法识别模块格式:C:\Users\pinto\Downloads\fontawesome-free-6.1.1-desktop。邮政编码 这是我的导入和悬停错误。

  • 这是我的项目结构:我有一个< code>xml文件,我需要在我的< code>junit测试用例中使用它,我不知道为什么我不能得到这个文件。 这是我的方法: 我总是得到相同的错误跟踪:

  • 所以我只想使用谷歌云视觉应用编程接口从图像中检测文本或标签。但是当我运行这段代码时,我总是得到: 但我不知道为什么。。。下面是我得到的完整json输出: 我的测试代码如下: 所以问题是。。此代码有什么问题?