这个问题使我感到困惑。我试着使用这样的循环:基本上,我尝试从输入中获取第一个数字,并执行公式,但它似乎不起作用。看上去很简单,但我想不出来。你能帮我一下吗?谢谢。
public static int ISBN(String ninedigitNum) {
number = 9;
while (number > 0) {
int nextDigit = ninedigitNum.substring(0,1);
...
}校验和(资料来源:普林斯顿大学)。国际标准书号(ISBN)是唯一指定一本书的10位码。最右边的数字是一个校验和数字,它可以从其他9位数字中唯一确定,条件是d1 + 2d2 + 3d3 +.+ 10d10必须是11的倍数(这里di表示右边的第1位数字)。校验和数字d1可以是从0到10的任意值: ISBN惯例是使用值X表示10。例如:对应于020131452的校验和数字是5,因为它是d1 + 2*2 + 3*5 + 4*4 + 5*1 + 6*3 + 7*1 + 8*0 + 9*2 + 10*0的唯一值。创建一个以9位整数为输入的d1方法ISBN(),并返回10位ISBN数。创建3个JUnit测试用例来测试您的方法。
我明白了,非常感谢大家!
发布于 2013-12-09 19:07:27
它不起作用呢?无论哪种方式,我认为您所缺少的是您不断地获得相同的子字符串,这将是字符串的第一个编号:int nextDigit = ninedigitNum.substring(0,1);。此外,您还需要使用int,而不是String;如果需要,可以从字符串转换为int,但是问题本身需要一个int。
有两种方法可以让人联想到这一点。我会这样做,通过意识到mod的幂为10会给你一个整数的数字,但更容易的方法是转换成一个字符数组,然后直接访问。请注意,这里没有错误检查;您必须自己添加。此外,这里还有很多“神奇数字”:好的代码通常很少,非常少。在尝试这样的问题之前,我建议学习更多的数据结构;老实说,至少没有数组和链接列表,几乎没有什么事情可以做。
char[] ISBN = ninedigitNum.toCharArray();
//Process each number
int total = 0;
for(int i=0; i<9; i++){
int current_int = Integer.parseInt(ISBN[i]);
total += current_int * (10 - i)
}
//Find value of d1
for(int i=0; i<9; i++){
if(((total + i) % 11) == 0){
total += i*100000000;
break;
}
}
return total;通常:在System.out.println(x);中使用打印输出,或者使用编译器的调试器来查看处理过程中发生了什么。
发布于 2013-12-09 20:24:15
这就是我写的代码。我仍然认为它可以更有效率。
public class Problem3 {
public static String ISBN(String x)
{
char[]temp = x.toCharArray();
int counter = 2;
int sum = 0;
int j=0;
for(int i=8;i>=0;i--)
{
sum+= counter*Integer.parseInt(""+temp[i]);
counter+=1;
}
for(j=0;j<10;j++)
{
if((sum+j)%11==0)
{
break;
}
}
return x+""+j;
}
public static void main(String args[])
{
String a = "020131452";
System.out.println(ISBN(a));
}
}希望这能有所帮助。
发布于 2013-12-09 20:26:18
这样做是可行的:
public static int ISBN(String nineDigitNum){
int sum = 0;
for(int i = 0; i<nineDigitNum.length(); i++){
sum += Integer.parseInt(""+nineDigitNum.charAt(i))*(10-i);
}
return (sum%11);
}我还相信,如果校验和为10,它应该返回一个X,因此您可以更改返回类型并在某个地方添加一个if语句,或者将if语句放在使用此方法的任何地方。
https://stackoverflow.com/questions/20477972
复制相似问题