0

ISBN-13 番号のチェック ディジットを計算しようとしています。ISBN 番号が有効か無効かはあまり心配していませんが、コードを機能させることを試みています。アルゴリズムの解釈には明らかに欠陥があります。それを修正する方法についての提案は歓迎されますが、主な問題は、整数変数には大きすぎるユーザー入力を受け取ることですが、double 値の小数も避けたいと考えています。

BigDecimal私はすでにandを使用しようとしましたBigNumberが、それらを完全に理解するには十分な経験がありません。これは、d13 (チェック ディジット) を見つけるアルゴリズムです: 10-(d1 +3d2 +d3 +3d4 +d5 +3d6 +d7 +3d8 +d9 +3d10 +d11 +3d12)%10.

コードは私が知っている混乱です。私はこの Web サイトを自分のやりたいことの参考として使用しており、この ISBN 番号を練習として使用しています: 9780132130806.

繰り返しますが、私の質問は、最終的な ISBN 番号を小数点なしで出力するにはどうすればよいですか? また、アルゴリズムを修正するにはどうすればよいでしょうか? (スキャナーを使用するよりも少しきれいに見えるので、JOption を使用する方法をお勧めします)


import javax.swing.JOptionPane;
import java.math.BigInteger;

public class ISBN
{
    //George Sayegh Calculate check Digit ISBN

    public static void main(String[] args)
    {
    //Define Variables
    double ISBN12, D1, D2, D3, D4, D5, D6, D7, D8, D9, D10, D11, D12 = 0, D13;
    double A = 100000000000L;
    double B = 10000000000L;
    double C = 1000000000;
    double D = 100000000;
    double E = 10000000;
    double F = 1000000;
    double G = 100000;
    double H = 10000;
    double I = 1000;
    double J = 100;
    double K = 10;
    double L = 1;

    //Get ISBN #
    String ISBN12text = JOptionPane.showInputDialog("Please enter the first 12 digits of your ISBN number");
    ISBN12 = Double.parseDouble(ISBN12text);

    //Calculate D1
    D1 = ((ISBN12 - (ISBN12 % A)) / A); 

    //Calculate D2
    D2 = ((ISBN12 - (ISBN12 % B)) / B);

    //Calculate D3
    D3 = ((ISBN12 - (ISBN12 % C)) / C);

    //Calculate D4
    D4 = ((ISBN12 - (ISBN12 % D)) / D);

    //Calculate D5
    D5 = ((ISBN12 - (ISBN12 % E)) / E);

    //Calculate D6
    D6 = ((ISBN12 - (ISBN12 % F)) / F);

    //Calculate D7
    D7 = ((ISBN12 - (ISBN12 % G)) / G);

    //Calculate D8
    D8 = ((ISBN12 - (ISBN12 % H)) / H);

    //Calculate D9
    D9 = ((ISBN12 - (ISBN12 % I)) / J);

    //Calculate D10
    D10 = ((ISBN12 - (ISBN12 % K)) / K);

    //Calculate D11
    D11 = ((ISBN12 - (ISBN12 % L)) / L);

    //Get D13
    D13 = 10 - (D1 + (3 * D2) + D3 + 3 * D4 + D5 + 3 * D6 + D7 + 3 * D8 + D9 + 3 * 10 + D11 + 3 * D12) % 10; 

    JOptionPane.showMessageDialog(null, D1 +""+ D2 +""+ D3 +""+ D4 +""+ D5 +""+ D6 +""+ D7 +""+ D8 +""+ D9 +""+ D10 +""+ D11 +""+ D12 +""+ 13);
    }
}     
4

2 に答える 2