Java 计算字符数的方法

Java 计算字符数的方法,java,Java,我创建了一家银行。我需要这个Luhn类来验证社会保险号。问题是,当用户输入一个1-9位数的数字时,程序就停止了。我希望它显示一条消息,如无效输入。请再试一次。我该怎么做 package bank6; import java.util.Scanner; public class Luhn { public static boolean checkLogin(String custPnr) { int length = custPnr.length();

我创建了一家银行。我需要这个Luhn类来验证社会保险号。问题是,当用户输入一个1-9位数的数字时,程序就停止了。我希望它显示一条消息,如无效输入。请再试一次。我该怎么做

package bank6;    
import java.util.Scanner;

public class Luhn {    
    public static boolean checkLogin(String custPnr) {
        int length = custPnr.length();
        int sum = 0;
        int pos = length-1;
        for (int i = 1; i<=10; i++, pos--){   
            char tmp = custPnr.charAt(pos);
            int num = Integer.parseInt(String.valueOf(tmp));
            int produkt;
            if (i % 2 != 0){
                produkt = num * 1;
            }else {
                produkt = num * 2;
            }
            if ( produkt > 9 )
                produkt -= 9;
            sum += produkt;
        }    
        boolean korrekt = (sum % 10) == 0;
        if (korrekt){
            System.out.println("Correct");
            return true;
        }else {
            System.out.println("Invalid");
            return false;
        }
}


    public static void main(String[] args) {

        String pnr;      
        System.out.println("Welcome customer. Please login by using your "+ "birthdate (yymmddxxxx)");
        Scanner input = new Scanner(System.in);
        pnr = input.nextLine();
        checkLogin(pnr);
    }
}
编辑

好的,我编辑了我的代码。但我还是会出错。我觉得我在编码方面有点迟钝。我马上就要吃自己的头了。 我理解为什么我得到无限递归,但不知道如何修复它。我该如何修复,这样我就不必向客户打印两次信息了

我正试图建立一家银行。要想登录查看你的账户等等,你需要输入一个瑞典社会保险号码来确认你是瑞典公民。这是一个类被验证的代码。密码任务是验证安全号码。如果数字是假的,代码将在代码底部给出假返回值,如果为真,则返回真返回值。一开始我遇到的问题是,如果有人输入一个1-9位数的数字,那么它就会崩溃。我希望它提供一个抱歉的无效输入。请重试,然后用户应返回登录并重试

我无法从main类运行代码,因此我必须在页面底部创建一个main,以便能够解决上述问题

这就是我现在的处境

package bank6;

import java.util.Scanner;

public class Luhn {

public static boolean checkLogin(String custPnr) {

    String pnr;

    System.out.println("Welcome customer. Please login by using your "
            + "birthdate (yymmddxxxx)");
    Scanner input = new Scanner(System.in);
    pnr = input.nextLine();

    do {
        System.out.println("Sorry, invalid input. Try again.");
        checkLogin(pnr);
    } while (pnr.length() != 10);

    int length = custPnr.length();

    int sum = 0;
    int pos = length - 1;
    for (int i = 1; i <= length; i++, pos--) {

        char tmp = custPnr.charAt(pos);
        int num = Integer.parseInt(String.valueOf(tmp));

        int produkt;
        if (i % 2 != 0) {
            produkt = num * 1;
        } else {
            produkt = num * 2;
        }
        if (produkt > 9) {
            produkt -= 9;
        }
        sum += produkt;
    }

    boolean korrekt = (sum % 10) == 0;

    if (korrekt) {
        System.out.println("Correct");
        return true;
    } else {
        System.out.println("Invalid");
        return false;
    }
}

public static void main(String[] args) {

    String pnr;

    System.out.println("Welcome customer. Please login by using your "
            + "birthdate (yymmddxxxx)");
    Scanner input = new Scanner(System.in);
    pnr = input.nextLine();
    checkLogin(pnr);
}
}

当您获得use输入时,只需使用if语句来检查长度

范例

String str = input.nextLine();
if(str.length() > 9){
    // Print error message
}else{
    checkLogin(str);
}
您可以使用do while循环,并使用str.length>9作为条件,以便循环直到输入有效的字符串。如果您没有使用do while循环,请尝试用谷歌搜索它们

问题在于:

for (int i = 1; i<=10; i++, pos--)
相反,您应该尝试:

for (int i = 1; i<=length; i++, pos--)

无效的条件是什么?您看过String.length了吗?请注意,您的循环应该从0-9开始运行,而不是从1-10开始运行。在我提问之前,我已经尝试过这个方法。但在最后一个大括号中,我得到了一个错误sayin missin return语句。问题是我需要它,因为如果一个人输入1985作为他们的出生年份,这在瑞典并不罕见,那么代码将只使用最后10位数字。通过该更改,您建议用户将变为无效。@Ribban然后在执行检查之前检查输入字符串的长度,就像其他人建议的那样。为您的退货问题添加了解决方案。
for (int i = 1; i<=length; i++, pos--)
String str = input.nextLine();
if(str.length() != 10){
    System.out.println("Invalid input. Please try again");
    return false;
}else{
    checkLogin(str);
}