Исправьте свой (собственный) текущий код
В исходном коде есть пара мелких ошибок:
isbnTotal = total + x;
total
нигде не объявлено, а isbnTotal
не инициализируется.
if (isbnTotal % 10 = 0) {
Вам нужно сравнить с двойным =
, одиночный - для присвоения, двойной ==
- для сравнения.
Разделите свой код в модули, чтобы улучшить его
... определить и показать, является ли номер действительным согласно приведенной выше формуле.
Я думаю, что вы забыли написать формулу, но согласно Википедии , это один:
Итак, вам нужно проверить, умножена ли сумма всех цифр на их вес (чередующийся 1 и 3) кратен 10.
Итак, прежде всего нам нужно получить сумму всех цифр и умножить каждое di git на 1 или 3, чередуя (в обратном порядке, как мы будем использовать оператор modulo
).
Итак, нам нужно что-то вроде этого:
private static int getSum(long isbn) {
int count = 0;
int sum = 0;
do {
sum += count % 2 == 0 ? isbn % 10 : 3 * (isbn % 10);
count++;
isbn /= 10;
} while (isbn > 0);
return sum;
}
Позвольте мне xplain, что делает приведенный выше код, - это использовать оператор ternary (CTRL-F на странице, чтобы прочитать об этом), чтобы определить, нужно ли нам умножать на 1 или 3 в формуле, которую он запускает с 1, поэтому самый простой способ сделать это - проверить, является ли текущий индекс четным или нечетным, если четный, умножить на 1, в противном случае умножить на 3 и добавить это число к сумме.
Затем он делит текущее число на 10.
Затем все, что нам нужно сделать, это проверить, кратна ли сумма всех цифр, умноженных на их соответствующие веса, на 10.
private static boolean isAValidISBN(long isbn) {
return getSum(isbn) % 10 == 0;
}
И непосредственно перед что, если в данном номере нет 13 цифр, мы говорим, что это не так.
Итак, в итоге наша программа должна быть примерно такой:
public class ISBNChecker {
public static void main(String[] args) {
String isbnNumber = "978030640615";
if (isbnNumber.length() != 13) {
System.out.println("ISBN Number is invalid");
return;
}
if (isAValidISBN(Long.parseLong(isbnNumber))) {
System.out.println(isbnNumber + " is a valid ISBN");
} else {
System.out.println(isbnNumber + " is not a valid ISBN");
}
}
private static int getSum(long isbn) {
int count = 0;
int sum = 0;
do {
sum += count % 2 == 0 ? isbn % 10 : 3 * (isbn % 10);
count++;
isbn /= 10;
} while (isbn > 0);
return sum;
}
private static boolean isAValidISBN(long isbn) {
return getSum(isbn) % 10 == 0;
}
}
И если берем значение из Википедии, получаем такой вывод:
9780306406157 is a valid ISBN