2015-12-22 103 views
3

我試圖找到一個數字中的所有數字的產品,我將它們存儲爲一個字符串(由於int和長度的限制)。Java中'0'做什麼?

所以數量看起來是這樣的:

final String number = "1234567898765432123......etc" 

如果我用這個代碼,它的工作原理:

product *= number.charAt(i + j) - '0'; 

它不會,如果我去掉 '0'。

我從另一個在線資源獲取了此代碼。有人可以解釋'0'是什麼嗎?

+0

這些ascii字符可以被轉換爲整數。這些都是ascii表上的索引,所以請檢查並獲得第二個想法,我想你會得到它;) – Stefan

回答

8

Ascii字符實際上是數字。 0 .. 9數字是從十進制48開始的數字(0x30十六進制)。

'0' is 48 
'1' is 49 
... 
'9' is 57 

因此,要獲得任何字符數字的值,你可以去掉「0」,即48

'1' - '0' => 1 
49 - 48 => 1 

如果不刪除「0」(48)總總和將會超過48 * numberOfDigits

查看ascii table來查找數字。

請注意,'0'是字符0,而不是字符串"0"包含字符'0'

1

字符和整數實際上是相同的東西,因爲每個字符都有一個代碼(ASCII,但在某些情況下也是Unicode)。

通過從字符串中的任意數字中減去'0',即可得到該整數的實際值。

'0' > 48 
48 - 48 = 0 (integer value) 

這同樣適用於所有其他整數。您可以使用其他字符做類似的事情,例如letter - 'A',根據字母在其中的位置爲每個字母分配一個數字。

5

讓我們來看看ASCII表enter image description here

你可以看到的「0」十二月價值 - >「9」

的的charAt()方法只是獲取字符,則自動轉換爲int值時計算。

'0' -> 48 
'1' -> 49 
... 
'9' -> 57 

減去 '0' 後:

'0' - '0' -> 48 - 48 = 0 
'1' - '0' -> 49 - 48 = 1 
... 
'9' - '0' -> 57 - 48 = 9 

畢竟,'N' - '0'= N其中n是一個數字字符

0

字符存儲爲數字。例如,在ASCII中'0'等於48。所以,如果你想要一個字符轉換爲整數,你必須刪除「0」(或刪除48人的工作方式相同):

product *= number.charAt(i + j) - 48; 

的更多信息:http://www.asciitable.com

1

「0」是char值爲零。

當你編寫一個字符串時,你正在編寫一個'char'數據類型的數組,它被編譯器轉換成ASCII值(它具有相應的十進制數值)。

當你調用

number.charAt(i + j); 

你實際上是產生ASCII值。

http://www.asciitable.com/

'0' 的ASCII值是:

'1':

。 。 。

'9':

所以,當你調用

number.charAt(i + j) - '0'; 

你實際上運行的ASCII值的操作零下48是它的實際價值爲整數。

例如

( '9' - '0')=(57 - 48)=(9 - 0)= 9

1

卸下從number.charAt(i + j)0會給你在數字(或integer)的形式相同的字符。

當您在任何表達式中使用字符時,該字符將被其ASCII值替換。爲'0'(字符0)

ASCII值是48 爲'1'(字符0)ASCII值是49

現在,如果number.charAt(i + j)'1'然後在表達'1'由49和'0'代替由48取代這會給你1integer)。