我不明白这个Java代码(位图字体)

时间:2013-01-03 14:58:50

标签: java arrays

我正在分析一个开源游戏代码,我不理解setDefaultSpecialChars()方法和setDefaultSmallAlphabet()。这些陈述fontCharTable[':']=1 + indexOf_Point;fontCharTable['a'+i] = indexOf_a + i;对我来说是新的。

 import javax.microedition.midlet.*;
 import javax.microedition.lcdui.*;

public class GFont {


public int[] fontCharTable = new int[256];

public void setFontCharTableDefaults(boolean specialChars) {
    setDefaultSmallAlphabet(0);
    setDefaultBigAlphabet(0);
    setDefaultDigits(27);
    if (specialChars) {
        setDefaultSpecialChars(37);
    }
}

public void setDefaultSpecialChars(int indexOf_Point) {
    fontCharTable['.']=0 + indexOf_Point;
    fontCharTable[':']=1 + indexOf_Point;
    fontCharTable[',']=2 + indexOf_Point;
    fontCharTable[';']=3 + indexOf_Point;
    fontCharTable['?']=4 + indexOf_Point;
    fontCharTable['!']=5 + indexOf_Point;
    fontCharTable['(']=6 + indexOf_Point;
    fontCharTable[')']=7  + indexOf_Point;
    fontCharTable['+']=8 + indexOf_Point;
    fontCharTable['-']=9 + indexOf_Point;
    fontCharTable['*']=10 + indexOf_Point;
    fontCharTable['/']=11 + indexOf_Point;
    fontCharTable['=']=12  + indexOf_Point;
    fontCharTable['\'']=13 + indexOf_Point;
    fontCharTable['_']=14 + indexOf_Point;
    fontCharTable['\\']=15 + indexOf_Point;
    fontCharTable['#']=16 + indexOf_Point;
    fontCharTable['[']=17 + indexOf_Point;
    fontCharTable[']']=18 + indexOf_Point;
    fontCharTable['@']=19 + indexOf_Point;
    fontCharTable['ä']=20 + indexOf_Point;
    fontCharTable['ö']=21 + indexOf_Point;
    fontCharTable['ü']=22 + indexOf_Point;
    fontCharTable['Ä']=fontCharTable['ä'];
    fontCharTable['Ö']=fontCharTable['ö'];
    fontCharTable['Ü']=fontCharTable['ü'];
}


public void setDefaultSmallAlphabet(int indexOf_a) {
    for (i=0; i<26; i++) {
        fontCharTable['a'+i] = indexOf_a + i;
    }
}


}

2 个答案:

答案 0 :(得分:2)

它只是一个普通的数组元素赋值表达式 - 但使用从charint的隐式转换。所以拿这个:

fontCharTable['+']=8 + indexOf_Point;

现在将其视为:

char indexAsChar = '+';
int indexAsInt = indexAsChar; // Use implicit conversion
fontCharTable[indexAsInt] = 8 + indexOf_Point;

现在更清楚了吗?

同样如此:

for (i=0; i<26; i++) {
    fontCharTable['a'+i] = indexOf_a + i;
}

可以写成:

for (i=0; i<26; i++) {
    int a = 'a';
    int index = a + i'
    fontCharTable[index] = indexOf_a + i;
}

答案 1 :(得分:1)

它们可能看起来很奇怪,但它们所做的只是使用字符作为索引。

如果你想看看他们在做什么,你可以尝试通过调试器中的代码来踩踏。