在java中使用hypen( - )有什么用?

时间:2017-11-04 01:19:31

标签: java arrays

有人可以解释一下runner.children[c-'a'] 表示以下代码。

public boolean search(String word) {
    TrieNode runner = root;
    for(char c : word.toCharArray()) {
        if(runner.children[c-'a'] == null) {
            return false;
        } else {
            runner = runner.children[c-'a'];
        }
    }
    return runner.isEndOfWord;
}

5 个答案:

答案 0 :(得分:2)

每个char都有一个数值,请查看the ASCII table以获取更多信息。

因此,假设变量c包含字符 b ,并从中减去字符 a ,您将获得 1 你的答案。

答案 1 :(得分:1)

那只是减法。您可以减去字符,就好像它们是数字一样。最终得到减去字符代码的结果。 'c' - 'a'(例如)等于2,因为'a''c'少2。

答案 2 :(得分:1)

-是减法运算符。

§15.18.2 The type of each of the operands of the binary - operator must be a type that is convertible to a primitive numeric type

§5.6.2 Widening primitive conversion is applied to convert either or both operands … both operands are converted to type int. Binary numeric promotion is performed on the operands of certain operators: … addition and subtraction operators for numeric types + and - …

换句话说,c'a'都属于char类型(UTF-16代码单元,范围从Character.MIN_VALUE到{{3} })。由于减法,它们被加宽为int,并减去,从而产生int类型的值。

想想数字行上的字符。减法是指从一个角色到另一个角色的距离。通过'a'的恒定引用,'a''b',... 'z'的距离为0,1,...... 25.这仅对某些短段有意义。 UTF-16号码线。

数组是基于0的,因此像这样移动比例允许使用字符来索引数组,而不会使用大量使用的部分,其元素对应于未使用的字符。

(注意:有些人说ASCII是因为他们认为在学习正确的东西的过程中更容易理解一个更简单,更错误的东西。)

答案 3 :(得分:0)

在这种情况下,children []可能是a-z中字母数量的大小。

上面发生的是他们取charc的ascii值,并减去' a'的ascii代码。有效地导致获得字母表中的char c的索引(假设为0-Index)

设c =' b'

[c-'a'] = 98 - 97 = 1 (Ascii of b - Ascii of a)

使用c =' d'

[c-'a'] = 100 - 97 = 3

答案 4 :(得分:0)

minus符号而不是连字符。在java中,char占用2个字节的空间。 char表示从00000000到11111111的位,最高有效位作为有符号位读取。您可以通过将char赋值给int变量来轻松地将其读作数字(因为int可以接受4个字节,因此2个字节的char可以很容易地适合)。

char charA = ''A'; // represents 65
char charB = `B`; // represents 66
int diff = charB - charA; // this will represent 66-65 i.e. 1

数组的索引是positve int,因此它也可以接受像

这样的值
anyTypeArray[charB - charA] //represents the 2nd element (index starts from 0 for arrays in java).

anyTypeArray['C' - charA] // represents the 3rd element of the array

另外,我喜欢上面https://stackoverflow.com/a/47106997/504133的回答,并希望添加其链接以扩展我的答案。