我想根据这个方案创建一个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的数字,所以我肯定会采用错误的方式 - 这是正确的方法吗?
答案 0 :(得分:1)
我会给你一些线索。
使用Math.random()生成你的数字(乘以例子10得到0,10之间),小心B1B2B3需要高于100,所以你不能只乘以100,这是一个线索:Min + (int)(Math.random() * ((Max - Min) + 1))
使用DecimalFormat保留零,因为如果我们得到1,我们希望得到01 new DecimalFormat("00")
DecimalFormat
在String上使用charAt或substring来获取es的各个值。 L1(Integer.parseInt)。
你算了吗?
你应该回家免费......
答案 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;
}
我希望这也可以帮助别人,感谢线索......这不是很难,我不知道为什么我在开始时感到困惑。