Java 计算字符数的方法
我创建了一家银行。我需要这个Luhn类来验证社会保险号。问题是,当用户输入一个1-9位数的数字时,程序就停止了。我希望它显示一条消息,如无效输入。请再试一次。我该怎么做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();
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);
}