2015-10-09 146 views
1

我想創建一個ISBN-數量根據該方案: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的情況下)。它們應該分配給預定義的字符串變量,重要的是數字L1L2和V1V2保存爲兩位數的字符串。例如,數字3應該保存爲字符串「03」。總共產生三個隨機數字,每個數據塊一個。

我真的很難理解這一點,它說,我可能會使用DecimalFormat thingy,但是..我不知道該怎麼做,有沒有人知道這應該如何解決?

包括hashtag計算操作在這裏這個方法:

// 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-Number ..我可能沒有足夠精確 - 這是字符串混淆了我,因爲現在我從來沒有使用過字符串以這種方式 - 我將如何將隨機數字再次變成字符串? - 這個練習真的讓我困惑......

我試着用Math.random()做一些事情,但我只會得到0以下的數字,所以我肯定會以這種錯誤的方式去做 - 正確的方法是什麼?

+3

那麼你的問題是什麼?用前導零創建一個數字串?創建一個隨機數字?計算校驗碼?到目前爲止你做了什麼? – SubOptimal

+0

你的問題在哪裏?這似乎是一個功課,你有什麼嘗試? DecimalFormat「thingy」肯定有一個javadoc,你有沒有讀過它? – dfogni

+0

有人說,我可能會使用DecimalFormat,但不必......而且這是一個練習 - 問題是根據我的問題中所述的定義生成整個ISBN-Number ..我可能沒有足夠精確 - 這是混淆了我的字符串,因爲從現在起我從來沒有以這種方式處理字符串 - 我怎樣才能將隨機數字再次變成字符串? - 這個練習讓我很困惑......並且如果我使用math.random,我只會得到低於0的數字,所以我肯定會以這種錯誤的方式去做 - 正確的方法是什麼? – DisasterCoder

回答

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. 使用的charAt或子獲得ES的各個值。 L1(Integer.parseInt)。

  4. 你計算一下。

你應該是免費的家...

+0

我明白了,謝謝你的線索,會看到我能用這個做什麼。當我完成後,我會在這裏發佈答案.. – DisasterCoder

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

我希望這也能幫助其他人,謝謝你的線索..這並不難,我不知道爲什麼我一開始就感到困惑。