2016-07-09 11 views
0

私はいくつかのJavaエクササイズを行っていますが、このコードでは私は完全にgrokしていません。文字での配列要素へのアクセス

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クラスがcharintに変換している可能性があると私は考えました。 printステートメントを追加しましたが、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

を指します。たとえば、文字'5'はちょうど5になります。これは、例えばローマ数字を表すUnicode文字や16進数の場合にも機能します。 (したがって'd''13'になります)

ただし、整数値が予想されるコンテキストでcharを使用すると、そのエンコーディングを使用して解釈されます。たとえば、'a'はコード97を持つため、array['a']arrayの98番目の要素にアクセスします。

これは、2つの出力の相違の原因です。 ;)

1

コードは入力文字列sの文字を数えています。 new int[128]という文字を作成するので、「通常の」ASCII文字をカバーできます。その後、letters[c]++は、cのカウンターを増やしています。 char Javaでintとして使用することができるので、letters[c]は数字として「解釈」の文字を返しCharacter.getNumericValueletters[<ASCII index of c>]

関連する問題