Shiv Patel - 1 year ago 143

Java Question

**Question :**

An ISBN-10 consists of 10 digits: d1,d2,d3,d4,d5,d6,d7,d8,d9,d10. The last digit, d10, is a checksum,which is calculated from the other nine digits using

*the following formula:*

**(d1 * 1 + d2 * 2 + d3 * 3 + d4 * 4 + d5 * 5 + d6 * 6 + d7 * 7 + d8 * 8 + d9 * 9) % 11**

If the checksum is 10, the last digit is denoted as X according to the ISBN-10

convention.

Write a program that prompts the user to enter the first 9 digits and displays the 10-digit ISBN (including leading zeros). Your program should read the input as an integer.

*Here are sample runs:*

**Enter the first 9 digits of an ISBN as integer: 013601267**

**The ISBN-10 number is 0136012671**

**MY CODE:**

`import java.util.Scanner;`

public class ISBN_Number {

public static void main(String[] args) {

Scanner s = new Scanner(System.in);

int[] num = new int[9];

System.out.println("Enter the first 9 digits of the an ISBN as integer: ");

for (int i = 0; i < num.length; i++) {

for (int j = 1; j < 10; j++) {

num[i] = s.nextInt() * j;

}

}

int sum = 0;

for (int a = 0; a < 10; a++) {

sum += num[a];

}

int d10 = (sum % 11);

System.out.println(d10);

if (d10 == 10) {

System.out.println("The ISBN-10 number is " + num + "X");

} else {

System.out.println("The ISBN-10 number is" + num);

}

}

}

I am new to learning java, hence I am having trouble trying to figure this question out. Can some tell me where I am going wrong because I am not getting the expected outcome. Thank you.

Answer Source

`nextInt()`

consumes the entire token `013601267`

, not just a single digit, which was not your plan. A much easier approach could be to consume it as a single string and then iterate over the characters:

```
String num = s.next();
int sum = 0;
for (int i = 1; i <= num.length(); ++i) {
sum += (i * num.charAt(i - 1) - '0');
}
int d10 = (sum % 11);
if (d10 == 10) {
System.out.println("The ISBN-10 number is " + num + "X");
} else {
System.out.println("The ISBN-10 number is " + num + d10);
}
```