2011-02-17 29 views
0

感謝一堆靜態的提示給你們所有回答的人!現在感覺不那麼沮喪了。另一個問題,這次關於打破一個字符串的有效性

我不會一步一步地提問整個任務,但我想確保這是下一步任務之一。我寫了下面的,它編譯罰款(目的是檢查字符串以確保它是一個數,用戶可能也進入了ISBN帶或不帶連字符的數字):

 private String validateISBN(String bookNum) 
    { 
     String[] book; 
     int j=0; 
     for (int i=0;i<bookNum.length();i++) 
     if (character.isDigit(bookNum.charAt[i])) 
      bookNum.charAt[i]=book[j];j++; 

我沒有寫下一個部分,它必須允許X作爲字符串中的最後一個數字(這顯然是ISBN號碼的工作方式)。我會假設,如果上面是正確的(或接近),所有我需要做的是檢查第九個字符是數字或X,通過寫這樣的:如果 書[9] ISDIGIT()||如果書[9] ==「x」||如果book [9] ==「X」;

這是正確的(ISBN號碼總是10個數字或9個數字,最後是X)?

+0

由於`book`是未初始化的數組,所以不能訪問`book [j]`... – Matten 2011-02-17 19:22:59

+1

j(即j ++)的增量在循環之外。即使只有一個表達式,最好始終使用大括號。 – 01es 2011-02-17 19:31:54

回答

2

ISBN-10的最後一位是校驗位。因爲你的方法應該是檢查輸入的ISBN是正確的,你算算你自己的校驗位,並將其與給定的一個(加上確保所有字符是數字)。

如果你不知道這是什麼意思,請閱讀http://en.wikipedia.org/wiki/International_Standard_Book_Number#Check_digits

驗票ISBN-10節中的2001年版國際ISBN中心的官方手冊中說,ISBN-10校驗位[ 18] - 這是十位數字ISBN的最後一位數字 - 必須的範圍從0到10(符號X來代替10),並且必須是這樣的,所有的十位數字的總和,每個乘以整數重量,降從10到1,是數字11模運算的倍數是便利用於計算使用模11中的每一個十位數ISBN的第一九個數字校驗位 - 不包括校驗位,本身 - 乘以由序列fr中的數字表示om 10到2,並且相對於11計算總和的剩餘部分。由此產生的餘數加上校驗位必須等於11;因此,校驗位是11減去產品總和的剩餘部分。

相關提示:還有13位ISBN-13 ...

也許您的解決方案可能是這樣的:

刪除破折號,打破stringint數組,計算第十位(請參閱wiki鏈接),如果全部都返回,則返回輸入字符串。

相關問題