我创建了一家银行。我需要这个"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);
}
}
答案 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);
}