gpt4 book ai didi

Java - 如何检查 13 位 isbn 号码是否有效

转载 作者:行者123 更新时间:2023-12-02 19:25:24 25 4
gpt4 key购买 nike

我需要编写一个程序,允许用户输入 13 位 ISBN 作为单个整数。

然后程序应该根据上面的公式确定并显示该数字是否有效。如果用户尝试输入长度超过 13 位的数字,它还需要打印一条错误消息。下面是我正在处理的代码。

我是java新手,不明白哪里出了问题。我似乎也不知道如何获取长变量的长度。

import java.util.Scanner;

public class ISBNChecker{
public static void main(String [] args){
long isbnNumber;
long isbnTotal;
long x;

Scanner scnr = new Scanner(System.in);
isbnNumber = scnr.nextLong();

while (isbnNumber > 0) {
x = isbnNumber % 10;
isbnTotal = total + x;
isbnNumber = isbnNumber / 10;

x = isbnNumber % 10;
isbnTotal = total + (3 * x);
isbnNumber = isbnNumber / 10;
}

if (isbnTotal % 10 = 0) {
System.out.println("Number is valid!");
}
else {
System.out.println("Number is invalid.");
}
}
}

最佳答案

修复您(自己的)当前代码

在您的原始代码中,有一些小错误:

isbnTotal = total + x;

total 未在任何地方声明,并且 isbnTotal 未初始化。

if (isbnTotal % 10 = 0) {

需要用双=进行比较,单数用于赋值,双==用于比较。


将代码分成模块以改进它

... determine and show whether the number is valid according to the formula above.

我想你忘记写公式了,但是根据Wikipedia ,是这个吗:

enter image description here

因此,您需要检查所有数字的总和乘以其权重(1 和 3 交替)是否是 10 的倍数。

因此,首先我们需要获得所有数字的总和,并将每个数字交替乘以 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;
}

让我解释一下上面的代码的作用,是利用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

关于Java - 如何检查 13 位 isbn 号码是否有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62479441/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com