计算字符数量的方法

时间:2014-10-17 06:09:46

标签: java

我创建了一家银行。我需要这个"Luhn"课来验证社会安全号码。问题是,当用户输入一个1-9位的数字时,程序就会停止。我希望它显示像"Invalid input. Please try again".我这样做的消息吗?

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);
    }
}

EDIT;

好的,我编辑了我的代码。但我仍然得到错误。我想当我开始编码时,我有点迟钝。我即将吃掉自己的脑袋。 我理解为什么我会得到无限的递归而不是如何解决它。我如何修复,所以我不必两次打印给客户的消息?

我试图建立一家银行。要登录以查看您的帐户等,您需要输入瑞典社会安全号码来验证您是瑞典公民。这是一个被代码验证的类。代码任务是验证安全号码。如果数字是假的,代码将给出“错误”返回(代码底部)和“true”返回,如果它是真的。我在一开始就遇到的问题是,如果有人输入1-9位数字,那么它就会崩溃。我希望它给出“抱歉,无效的输入。请再试一次”然后用户应该被带回登录并再试一次。

我无法运行主类中的代码,所以我必须在页面底部制作一个主页才能解决上述问题。

现在就是我。

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);
}
}

2 个答案:

答案 0 :(得分:0)

获得使用输入时,只需使用if语句检查长度。

实施例

String str = input.nextLine();
if(str.length() > 9){
    // Print error message
}else{
    checkLogin(str);
}

您可以使用do-while循环并使用str.length() > 9作为条件,以便循环直到输入有效的字符串。如果您还没有使用do-while循环,请尝试使用Google搜索它们!

答案 1 :(得分:0)

问题在于:

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

您始终从1到10循环,就像有10个字符一样。如果用户输入的字符串小于10个字符,那么“pos”将超过0,您将在此处获得StringIndexOutOfBoundsException

char tmp = custPnr.charAt(pos);

相反,你应该尝试:

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);
}