Java生成带字符串的随机ISBN号?

时间:2015-10-09 07:05:02

标签: java

我想根据这个方案创建一个ISBN号码:

L1L2 −B1B2B3 −V1V2 −C 

标题号B1B2B3必须≥100,而L1L2和V1V2必须大于0.校验位0≤C≤9应如下计算:

C = L1#2 + L2 + B1#2 + B2 + B3#2 + V1 + V2#2 mod 10 

i#2 = i∗2 (or) i#2 = i∗2−9 (if i∗2 ≥ 10 )

现在,我需要在此方法中使用字符串执行此操作:

public static String makeISBN()
{
    // Do NOT change the declaration of the following variables!
    String L1L2;
    String B1B2B3;
    String V1V2;
    String C;

    // generate randoom ISBN here   

    // Do not change the following line
    return L1L2+ "-" + B1B2B3+ "-" + V1V2+ "-" + C;
}

在该方法中,必须随机生成或计算数字L1L2,B1B2B3,V1V2和C(在C的情况下)。应将它们分配给预定义的String变量,重要的是将数字L1L2和V1V2保存为两位数的字符串。例如,数字3应保存为字符串“03”。生成总共三个随机数,每个块一个。

我真的很难理解这一点,它说我可能会使用DecimalFormat但很好......我不知道该怎么做,有没有人知道这应该如何解决?

这里使用此方法计算主题标签操作:

// multiplies i with 2 and subtracts 9 if result is >= 10
public static int hashOp( int i )
{
    // Do NOT change this method!
    int doubled = 2 * i;
    if ( doubled >= 10 ) {
        doubled = doubled - 9;
    }
    return doubled;
}

并且在主字符串方法中我只是打算调用makeISBN()方法并在控制台上打印多次..感谢您的帮助!

编辑: 问题是根据我的问题中所述的定义生成整个ISBN号码。我可能还不够准确 - 这是让我感到困惑的字符串,因为从现在开始我从未使用过字符串。这种方式 - 如何将随机数再次更改为字符串? - 这个练习让我很困惑..

我尝试用Math.random()做一些事情,但我只会得到低于0的数字,所以我肯定会采用错误的方式 - 这是正确的方法吗?

2 个答案:

答案 0 :(得分:1)

我会给你一些线索。

  1. 使用Math.random()生成你的数字(乘以例子10得到0,10之间),小心B1B2B3需要高于100,所以你不能只乘以100,这是一个线索:Min + (int)(Math.random() * ((Max - Min) + 1))

  2. 使用DecimalFormat保留零,因为如果我们得到1,我们希望得到01 new DecimalFormat("00") DecimalFormat

  3. 在String上使用charAt或substring来获取es的各个值。 L1(Integer.parseInt)。

  4. 你算了吗?

  5. 你应该回家免费......

答案 1 :(得分:1)

哎呀,我花了一些时间做这些练习,我平时被别的东西占用了,但是,这是我的解决方案:

    public static String makeISBN()
    {
        String laendercode;
        String bandnr;
        String verlagsnr;
        String checksum;

// Generate Random Numbers for L1L2-B1B2B3-V1V2
        double L1 = Math.random()*(10);
        double L2 = Math.random()*(10);

        double B1 = Math.random()*(10);
        double B2 = Math.random()*(10);
        double B3 = Math.random()*(10);

        double V1 = Math.random()*(10);
        double V2 = Math.random()*(10);

// Check that L1L2 > 0  
        if((int)L1 == 0 && (int)L2 == 0) {
            L2++;
        }
// Check that L1B2B3 >= 100         
        if((int)B1 == 0) {
            B1++;
        }
// Check that V1V2 > 0          
        if((int)V1 == 0 && (int)V2 == 0) {
            V2++;
        }
// Compute check digit with hashOp method       
        double C = (hashOp((int)L1) +L2 + hashOp((int)B1) +B2 + hashOp((int)B3) +V1 + hashOp((int)V2))%10;

// Convert the generated numbers to String      
        laendercode     = (int)L1+""+(int)L2;
        bandnr          = (int)B1+""+(int)B2+""+(int)B3;
        verlagsnr       = (int)V1+""+(int)V2;
        checksum        = (int)C+"";

        return laendercode + "-" + bandnr + "-" + verlagsnr + "-" + checksum;
    }

这是hashOp方法:

public static int hashOp(int i)
{
    // used to determine C
    int doubled = 2 * i;
    if ( doubled >= 10 ) {
        doubled = doubled - 9;
    }
    return doubled;
}

我希望这也可以帮助别人,感谢线索......这不是很难,我不知道为什么我在开始时感到困惑。