java中while循环中的数据问题
运行此代码时,我无法正确添加号码。它只添加最后一个循环中的数据java中while循环中的数据问题,java,while-loop,Java,While Loop,运行此代码时,我无法正确添加号码。它只添加最后一个循环中的数据 public class P4_3 { public static void main(String[] args) { Scanner in = new Scanner(System.in); System.out.println("Please enter your 8 digit Credit Card Number "); String cardNumber =
public class P4_3
{
public static void main(String[] args)
{
Scanner in = new Scanner(System.in);
System.out.println("Please enter your 8 digit Credit Card Number ");
String cardNumber = in.next();
if (cardNumber.length() == 8)
{
int totalFirst = 0;
int currentIndex = cardNumber.length() - 1;
int secondIndex = cardNumber.length() -2;
int secondDouble = 0;
String collectDigit;
int digitSecond = 0;
int digitFirst = 0;
int totalDigit = 0;
while (currentIndex >= 0)
{
int smallValue = Character.digit(cardNumber.charAt(currentIndex), 10);
totalFirst = totalFirst + smallValue;
currentIndex = currentIndex - 2;
int secondValue = Character.digit(cardNumber.charAt(secondIndex), 10);
secondDouble = secondValue * 2;
secondIndex = secondIndex - 2;
System.out.println("second double " + secondDouble);
collectDigit = Integer.toString(secondDouble);
if (collectDigit.length() == 2)
{
digitFirst = Character.digit(collectDigit.charAt(0), 10);
digitSecond = Character.digit(collectDigit.charAt(1), 10);
totalDigit = digitFirst + digitSecond;
System.out.println("First digit " + digitFirst);
System.out.println("Second digit " + digitSecond);
}
else
{
digitFirst = Character.digit(collectDigit.charAt(0), 10);
totalDigit = digitFirst;
}
}
int checkNumber = totalDigit + totalFirst;
System.out.println("Card check number = " + checkNumber);
if (checkNumber % 5 == 0)
{
System.out.println("The final digit of Check number is 0" + checkNumber);
}
else
{
System.out.println("The credit card number is not valid " + checkNumber);
}
}
else
{
System.out.println("Credit Card number not correct length");
}
}
}
我不知道currentIndex的起始值是多少,但是如果它是0或1,那么循环的第一次迭代将把它设置为负区域,而你的
while
条件要求它大于或等于0
简而言之,如果
currentIndex
从0或1开始,在程序退出循环之前只会得到一次迭代。我不知道currentIndex
从什么值开始,但是如果它是0或1,那么通过循环的第一次迭代会将它设置为负区域,而您的,而
条件要求它大于或等于0
简而言之,如果
currentIndex
从0或1开始,在程序退出循环之前,您只会得到一次迭代。好的,您更新的代码有点难以理解(即使格式正确),但是如果我理解它在这里试图做什么,那么实现这一点的方法可能更简单(我在这里滥用运行时异常):
13345678测试返回一张有效的信用卡(校验和为35)。至于代码出错的地方,看起来totalDigit的赋值正在将其值重置为最后执行的循环。当然,我假设这就是你所指的,当你说只加最后一个总数时。如果我错了,您可以更改我的代码,并获得与您的代码完全相同的行为(只需较少的全局变量)好的,您的更新代码有点难以遵循(即使使用正确的格式),但是如果我理解它在这里试图做什么,那么实现这一点的更简单方法可能是(我在这里滥用RuntimeException):
13345678测试返回一张有效的信用卡(校验和为35)。至于代码出错的地方,看起来totalDigit的赋值正在将其值重置为最后执行的循环。当然,我假设这就是你所指的,当你说只加最后一个总数时。如果我错了,您可以更改我的代码,并获得与您的代码完全相同的行为(只需较少的全局变量)您的代码或其格式有问题,我只看到一个循环。什么是“currentIndex”?如果它是0,那么循环只执行一次,因为在这个currentIndex为-2之后,循环条件为false。对不起,我现在更新了代码。好的,这是因为代码没有做你认为它正在做的事情。在我看来,你能得到的最好的建议是确定这个验证中涉及的各个逻辑步骤,并制定一个表示每个步骤的方法。实施每种方法并单独测试每个部件。程序逻辑中的错误应该变得更加明显。代码或其格式有问题,我只看到一个循环。什么是“currentIndex”?如果它是0,那么循环只执行一次,因为在这个currentIndex为-2之后,循环条件为false。对不起,我现在更新了代码。好的,这是因为代码没有做你认为它正在做的事情。在我看来,你能得到的最好的建议是确定这个验证中涉及的各个逻辑步骤,并制定一个表示每个步骤的方法。实施每种方法并单独测试每个部件。程序逻辑中的错误应该变得更加明显。您不能在注释中发布代码块。最好编辑您的问题。您不能在注释中发布代码块。最好编辑你的问题。
public class P4_3_simple {
public static int checkNumber(String cardNumber) {
int size = cardNumber.length();
int sum_firsts = 0;
int sum_seconds = 0;
if(size == 8) {
for(int index = 7; index >= 0; index -= 2) {
int first = Character.digit(cardNumber.charAt(index), 10);
int second = Character.digit(cardNumber.charAt(index - 1), 10) * 2;
sum_firsts += first;
sum_seconds += addDigits(second);
}
} else {
throw new RuntimeException("Credit Card number not correct length");
}
return sum_firsts + sum_seconds;
}
public static int addDigits(int value) {
int reduced = value;
if(reduced > 9) {
reduced = 0;
char[] digits = Integer.toString(value, 10).toCharArray();
for(char digit : digits) {
reduced += Character.digit(digit, 10);
}
}
return reduced;
}
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
System.out.println("Please enter your 8 digit Credit Card Number ");
int checkNumber = checkNumber(in.next());
System.out.println("Card check number = " + checkNumber);
if (checkNumber % 5 == 0) {
System.out.println("The final digit of Check number is 0" + checkNumber);
} else {
System.out.println("The credit card number is not valid " + checkNumber);
}
}
}