а) Начиная с контрольной цифры и двигаясь влево, вычислите сумму всех декодированных цифр. б) Вычислите остаток суммы, используя целочисленное деление на 10. Если результат не равен нулю, номер кредитной карты недействителен. В противном случае номер карты, скорее всего, будет действительным.
Вот два примера:
Card number: 2315778 Card number 1234567
decode(8, false) = 8 decode(7, false) = 7
decode(7, true) = 5 decode(6, true) = 3
decode(7, false) = 7 decode(5, false) = 5
decode(5, true) = 1 decode(4, true) = 8
decode(1, false) = 1 decode(3, false) = 3
decode(3, true) = 6 decode(2, true) = 4
decode(2, false) = 2 decode(1, false) = 1
Sum = 30 Sum = 31
30 mod 10 = 0 31 mod 10 = 1
This number may be valid This number is invalid
Напишите статический метод с именем checkDigits, которому передается семизначный номер кредитной карты и который выполняет шаги, описанные выше. Повторно используйте метод декодирования, который вы написали в лабораторной работе 5.5.1. Метод должен возвращать слово «действительно», если число проходит проверку, и «недействительно» в противном случае.
import java.util.Scanner;
public class JavaApplication90
{
public static void main(String[] args)
{
Scanner scan = new Scanner(System.in);
int num = 2315778;
System.out.println("Credit card number: " + num + " is " + checkDigits(num));
num = 1234567;
System.out.println("Credit card number: " + num + " is " + checkDigits(num));
num = 7654321;
System.out.println("Credit card number: " + num + " is " + checkDigits(num));
num = 1111111;
System.out.println("Credit card number: " + num + " is " + checkDigits(num));
}
public static boolean checkDigits(int num)
{
int sum = 0;
String reverse = new StringBuffer(num).reverse().toString();
for (int i = 0; i < reverse.length(); i++){
int product = 0;
if (i % 2 == 0)
{
product = num * 2;
}
if (product < 9)
product = (product%10)-1;
sum = sum+ product ;
}
return (sum % 10 == 0);
}
}
Выход:
Я получаю истинный/действительный ответ для всех чисел. Я не могу найти свою ошибку. Помощь!
System.out.println
вызовы вcheckDigits
, чтобы увидеть, как ваши переменные меняются по мере выполнения. Если вы сделаете это, вы увидите, где ваши ошибки. - person ajb   schedule 05.11.2014