-3

質問 :

ISBN-10 は、d1、d2、d3、d4、d5、d6、d7、d8、d9、d10 の 10 桁で構成されます。最後の桁 d10 はチェックサムで 、次の式を使用して他の 9 桁から計算されます。

(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 (先行ゼロを含む) を表示するプログラムを作成してください。プログラムは入力を整数として読み取る必要があります。

サンプルの実行は次のとおりです。

ISBN の最初の 9 桁を整数で入力してください: 013601267

ISBN-10 番号は 0136012671 です

私のコード:

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);
        }
    }
}

問題: 私は Java を学ぶのが初めてなので、この質問を理解するのに苦労しています。期待した結果が得られないため、どこが間違っているのか教えてもらえますか。ありがとうございました。

4

2 に答える 2

0

nextInt()あなた013601267の計画ではありませんでした。はるかに簡単なアプローチは、それを単一の文字列として使用してから、文字を反復処理することです。

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);
}
于 2016-09-13T21:38:16.490 に答える