ОК, ваш обновленный код немного сложен для отслеживания (даже при правильном форматировании), но если я понимаю, что он пытается сделать здесь, это может быть более простой способ сделать это (и я использую здесь исключения RuntimeExceptions):
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);
}
}
}
Тест 13345678 возвращает действительную кредитную карту (с контрольной суммой 35). Что касается того, где ваш код пошёл не так, похоже, что ваши присваивания totalDigit сбрасывают его значение в последний выполненный цикл. Я, конечно, предполагаю, что вы имеете в виду это, когда говорите, что добавлена только последняя сумма. Если я ошибаюсь, вы можете изменить мой код и получить то же поведение, что и ваш код (только с меньшим количеством глобальных переменных)