我必须创建一个 java 程序,根据信用卡号是 Visa 卡还是 MasterCard 来验证信用卡号。我需要将卡号读取为单个字符串,每组四位数字之间有空格 (xxxx xxxx xxxx xxxx)。必须有 16 位数字。数字中的所有数字必须相加。那么,如果sum%10=0,则为有效签证。如果 sum%10=1,则为有效的万事达卡。任何偏离此结果都会导致无效消息。
我的问题是,一旦我运行当前的程序,我输入号码和卡类型,然后程序就会停止并且不会继续。我不确定我在这里做错了什么。
import java.util.Scanner;
public class Assignment4
{
public static void main (String[] args)
{
String cardNum;
String typeAnswer;
char cardType;
int testSum;
int modResult;
Scanner scan = new Scanner (System.in);
System.out.println("\t\t Credit Card Verification");
System.out.println("\t\t ========================");
System.out.println("Enter your card number <xxxx xxxx xxxx xxxx>: ");
cardNum = scan.nextLine();
if(cardNum.length()<19 || cardNum.length()>19)
{
System.out.println("Incorrect card number. Re-launch the program and enter a 16-digit card number");
System.exit(0);
}
else
{
System.out.println("Is your card Visa or MasterCard?");
typeAnswer = scan.next().toUpperCase();
cardType = answer.charAt(0);
String numSet1 = cardNum.substring(0,4);
String numSet2 = cardNum.substring(5,9);
String numSet3 = cardNum.substring(10,14);
String numSet4 = cardNum.substring(15,19);
int i = Integer.parseInt(numSet1);
int j = Integer.parseInt(numSet2);
int k = Integer.parseInt(numSet3);
int l = Integer.parseInt(numSet4);
int sum1=0;
while(i>0)
{
sum1 = sum1 + (i%10);
i = i/10;
}
int sum2 = 0;
while(j>0)
{
sum2 = sum2 + (j%10);
j = j/10;
}
int sum3 = 0;
while(k>0)
{
sum3 = sum3+ (k%10);
k = k/10;
}
int sum4 = 0;
while(l>0)
{
sum4 = sum4 + (l%10);
j = j/10;
}
testSum = sum1 + sum2 + sum3 + sum4;
modResult = testSum%10
if(modResult=0 && cardType=V)
{
System.out.println("Valid Visa card.");
}
else if (modResult=1 && cardType=M)
{
System.out.println("Valid MasterCard.");
}
else
{
System.out.println("Not a valid " + typeAnswer + " card. Re-launch and try again.");
}
}
}
}
最佳答案
-
answer
未定义。应该是typeAnswer
。 modResult = testSum%10
后面缺少分号。if
语句中的条件错误:- 使用
==
运算符(而不是=
运算符)来比较基元类型的值。 - 使用字 rune 字
'V'
和'M'
而不是 undefined symbolV
和M
。
- 使用
-
l
在第 4 个循环中没有更新,因此如果第 4 个数字为正数,则将是无限循环。j = j/10;
应该是l = l/10;
。
试试这个:
import java.util.Scanner;
public class Assignment4
{
public static void main (String[] args)
{
String cardNum;
String typeAnswer;
char cardType;
int testSum;
int modResult;
Scanner scan = new Scanner (System.in);
System.out.println("\t\t Credit Card Verification");
System.out.println("\t\t ========================");
System.out.println("Enter your card number <xxxx xxxx xxxx xxxx>: ");
cardNum = scan.nextLine();
if(cardNum.length()<19 || cardNum.length()>19)
{
System.out.println("Incorrect card number. Re-launch the program and enter a 16-digit card number");
System.exit(0);
}
else
{
System.out.println("Is your card Visa or MasterCard?");
typeAnswer = scan.next().toUpperCase();
cardType = typeAnswer.charAt(0);
String numSet1 = cardNum.substring(0,4);
String numSet2 = cardNum.substring(5,9);
String numSet3 = cardNum.substring(10,14);
String numSet4 = cardNum.substring(15,19);
int i = Integer.parseInt(numSet1);
int j = Integer.parseInt(numSet2);
int k = Integer.parseInt(numSet3);
int l = Integer.parseInt(numSet4);
int sum1=0;
while(i>0)
{
sum1 = sum1 + (i%10);
i = i/10;
}
int sum2 = 0;
while(j>0)
{
sum2 = sum2 + (j%10);
j = j/10;
}
int sum3 = 0;
while(k>0)
{
sum3 = sum3+ (k%10);
k = k/10;
}
int sum4 = 0;
while(l>0)
{
sum4 = sum4 + (l%10);
l = l/10;
}
testSum = sum1 + sum2 + sum3 + sum4;
modResult = testSum%10;
if(modResult==0 && cardType=='V')
{
System.out.println("Valid Visa card.");
}
else if (modResult==1 && cardType=='M')
{
System.out.println("Valid MasterCard.");
}
else
{
System.out.println("Not a valid " + typeAnswer + " card. Re-launch and try again.");
}
}
}
}
请注意,该程序还有更多问题需要修复。例如,该程序接受 -123 -456 -789 -147
作为有效的 Visa 卡。
关于java - (Java) 需要帮助对整数组中的数字求和并将其应用于信用卡验证算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36110258/