我有一个作业,要求我从输入中请求一个12位数字(必须作为字符串)并计算出它的最后一位数字。但是,它会在digits[i] = temp%10;
返回错误,说我无法执行此操作。有没有其他人有这方面的经验呢?
import java.util.*;
public class Exercise05_47{
public static void main(String []args){
Scanner sc = new Scanner(System.in);
int[] digits;
int d13 = 0;
System.out.println("Enter the first 12 digits of an ISBN-13 as a string: ");
String ISBN = sc.nextLine();
Long realISBN = Long.parseLong(ISBN);
Long temp = realISBN;
Long ten = 10L;
if(ISBN.length() != 12)
{
System.out.println(ISBN+" is an invalid input");
return;
}
else
{
for(int i=0;i<=12;i++)
{
digits[i] = temp%10 ;
temp /=10;
}
d13 = 10-(digits[0]+3*digits[1]+digits[2]+3*digits[3]+digits[4]+3*digits[5]+digits[6]+3*digits[7]+digits[8]+3*digits[9]+digits[10]+3*digits[11])%10;
if(d13 ==10)
{
d13=0;
}
}
System.out.println("The ISBN-13 number is "+ISBN+d13);
}
}
答案 0 :(得分:4)
您无法将Long
(或long
)存储到int[]
,因为长整数使用的字节数多于常规整数。这尤其意味着并非所有long
值都可以表示为int
。解决问题的一种方法是使用long[]
代替。
从技术上讲,您也可以将ISBN解析为int
,但通常ID总是很长,以支持非常多的值,有些ISBN实际上不适合int
,因此我的回答(请参阅此wiki page,它会告诉您ISBN最多可以有13个数字,超过int
最大容量约20亿个。)
您可以在this page或this one上找到有关不同基元类型的值的大小和范围的一些信息,以获取更多详细信息。
然而,正如 Ilya Bursov 指出的那样,你的数组只包含数字,因此小于10.你可以在short
或int
中填入任何数字,因此,在这种情况下将long
值转换为较小的基本类型是安全的,即(int) (temp % 10)
。