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);
    }
  }
}