gpt4 book ai didi

java - (Java) 需要帮助对整数组中的数字求和并将其应用于信用卡验证算法

转载 作者:行者123 更新时间:2023-12-01 10:11:03 25 4
gpt4 key购买 nike

我必须创建一个 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 symbol VM
  • 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com