2016-07-09 120 views
0

我正在經歷一些Java練習,並且發生在我沒有完全理解的這段代碼上。使用字符訪問數組元素

public static boolean permutation(String s, String t) { 
     if (s.length() != t.length()) { 
      return false; 
     } 

     int[] letters = new int[128]; 

     char[] s_array = s.toCharArray(); 
     for (char c : s_array) { 
      letters[c]++; 
     } 
     // omitted other code 
} 

當我打印出letters的內容時,我看到一個整數數組。根據我傳遞給函數的字符串,數組返回01的變體。

我想也許Array類正在將char轉換爲int。我添加了一個打印語句來幫助,但我看到d的值爲13,但我看到陣列中的第13個元素仍然爲0。該代碼看起來是這樣的:

import java.util.Arrays; 

public class Main { 

    public static void main(String[] args) { 
     String word1 = "dog"; 
     String word2 = "god"; 
     permutation(word1, word2); 
    } 

    public static boolean permutation(String s, String t) { 
     if (s.length() != t.length()) { 
      return false; 
     } 

     int[] letters = new int[128]; 

     char[] s_array = s.toCharArray(); 
     for (char c : s_array) { 
      System.out.println(Character.getNumericValue(c)); 
      letters[c]++; 
     } 

     System.out.println(Arrays.toString(letters)); 
     return true; 
    } 
} 

輸出:

13 
24 
16 
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] 

我的問題是什麼Array[char]語法翻譯成?

回答

1

Character.getNumericValue返回「解釋」作爲數字的字符。例如,字符'5'變成5。這也適用於代表羅馬數字的Unicode字符或十六進制數字。 (因此'd'變得'13'。)

但是,當在其中的積分值預計的上下文使用char,它使用它的編碼解釋。例如'a'的代碼爲97,所以array['a']訪問array的第98個元素。

這就是您的兩個輸出不一致的原因。 ;)

1

該代碼正在計算輸入字符串中的字母s。您創建字母爲new int[128],因此您可以覆蓋「正常」ASCII字符。然後letters[c]++增加char c的計數器。 char可以用作在Java中int,所以letters[c]letters[<ASCII index of c>]