我还是Java新手,这个问题如下:ISBN-10(国际标准书号) 由10位数字组成:d1d2d3d4d5d6d7d8d9d10。最后一位数字d10是校验和, 使用以下公式从其他九位数计算: (d1 * 1 + d2 * 2 + d3 * 3 + d4 * 4 + d5 * 5 + d6 * 6 + d7 * 7 + d8 * 8 + d9 * 9)%11 如果校验和为10,则根据ISBN-10将最后一位数字表示为X. 惯例。编写一个程序,提示用户输入前9位数字 显示10位ISBN(包括前导零)。你的程序应该阅读 输入为整数。
请参阅下面的代码: 它工作但结果不正确!
public static Scanner input;
public static void main(String[] args)
{
input = new Scanner(System.in);
System.out.print("Enter first 9 digit numbers: ");
int[] arr = new int[9];
int checkSum = 0;
for (int i = 0 ; i < arr.length; i++)
{
arr[i] = input.nextInt();
checkSum = (arr[i] * i) % 11;
}
System.out.print("The ISBN-10 Number is " );
for(int j = 0 ; j < arr.length; j++)
{
System.out.print(arr[j]);
}
if(checkSum == 10)
{
System.out.println("x");
}
else
{
System.out.println(checkSum);
}
我只想使用循环,让我的方法有效。 ,我知道如何使用没有循环的方法。
答案 0 :(得分:1)
好。对于JAVA 数组索引从0开始,Max索引的长度为1。 如果指数不在此范围内。将抛出arrayoutofbounds异常
答案 1 :(得分:1)
问题不在于您正在int i = 1
而不是int i = 0
。问题是您已将i < arr.length;
更改为i <= arr.length;
。由于arr.length
为9,因此您的代码正在尝试引用arr[9]
,但arr
仅包含arr[0]
到arr[8]
的元素。
答案 2 :(得分:0)
int[] arr = new int[9];
这意味着该阵列有9个插槽。这些插槽的编号从0开始。因此,
最后一个插槽是arr [8]。但是在下面的代码中你要迭代直到我等于9,这是不存在的。
for (int i = 1 ; i <= arr.length; i++)
{
arr[i] = input.nextInt();
checkSum = (arr[i] * (i+1)) % 11;
}
这会导致ArrayIndexOutOfBoundsException。将for (int i = 1 ; i <= arr.length; i++)
更改为for (int i = 0 ; i < arr.length; i++)
答案 3 :(得分:0)
首先,回顾一下我们如何使用数组...
int[] I = new int[3];
上面创建了一个包含3个点的数组。在实例化数组之后,每个元素都基于0索引。您只有I [0],I [1]和I [2]可用(注意这是三个数字)并且尝试访问I [3]将抛出您在上面的程序中遇到的错误:ArrayIndexOutOfBoundsException。
话虽如此,你的循环正试图访问arr [9]。你在数组中的最高索引是arr [8],因为尽管数组中有9个元素,但它是0索引的。
假设您必须从1开始i
完成家庭作业或其他任务,请将您的代码更改为:
public static Scanner input;
public static void main(String[] args)
{
input = new Scanner(System.in);
System.out.print("Enter first 9 digit numbers: ");
int[] arr = new int[9];
int checkSum = 0;
for (int i = 1 ; i <= arr.length; i++)
{
arr[i-1] = input.nextInt();
checkSum = (arr[i-1] * i) % 11;
}
System.out.print("The ISBN-10 Number is " );
for(int j = 1 ; j <= arr.length; j++)
{
System.out.print(arr[j-1]);
}
if(checkSum == 10)
{
System.out.println("x");
}
else
{
System.out.println(checkSum);
}
答案 4 :(得分:0)
B的错误表示已使用非法索引访问了数组。索引为负数或大于或等于数组的大小。 在你的例子中,最后一个插槽是arr [8]。但是在你的例子B的代码中,你正在迭代直到我等于9,这是不存在的。这就是问题所在。
答案 5 :(得分:-1)
以下是文档https://docs.oracle.com/javase/7/docs/api/java/lang/ArrayIndexOutOfBoundsException.html
没有元素arr [arr.length]