以下方法如何工作

时间:2014-01-09 17:24:18

标签: java

您好我发现以下代码用于比较一组指纹:

public float compare(Fingerprint fingerprint) {
    float result = 0f;

    HashMap<String, Integer> fingerprintMeasurements = fingerprint.getMeasurements();
    TreeSet<String> keys = new TreeSet<String>();
    keys.addAll(mMeasurements.keySet());
    keys.addAll(fingerprintMeasurements.keySet());

    for (String key : keys) {
        int value = 0;
        Integer fValue = fingerprintMeasurements.get(key);
        Integer mValue = mMeasurements.get(key);
        value = (fValue == null) ? -119 : (int) fValue;
        value -= (mValue == null) ? -119 : (int) mValue;
        result += value * value;
    }

    //result = FloatMath.sqrt(result); // squared euclidean distance is enough, this is not needed

    return result;
}

    /** compares the fingerprint to a set of fingerprints and returns the fingerprint with the smallest euclidean distance to it */
    public Fingerprint getClosestMatch(ArrayList<Fingerprint> fingerprints) {
        //long time = System.currentTimeMillis();
        Fingerprint closest = null;
        float bestScore = -1;

        if(fingerprints != null) {
            for(Fingerprint fingerprint : fingerprints) {
                float score = compare(fingerprint);
                if(bestScore == -1 || bestScore > score) {
                    bestScore = score;
                    closest = fingerprint;
                }
            }           
        }

        //time = System.currentTimeMillis() - time;
        //Log.d("time", "\n\n\n\n\n\ncalculation location took " + time + " milliseconds.");
        return closest;
    }

1) 循环如何工作。 我的理解是,我们扫描存储在TreeSet

的键引用中的所有值

问题主要在线上

value = (fValue == null) ? -119 : (int) fValue;
value -= (mValue == null) ? -119 : (int) mValue;

问号在这些代码行上做了什么?

2)为什么我们需要在下面的代码行中使用减号来提取最佳指纹参数

if(bestScore == -1 || bestScore > score) {

3)有没有办法在eclipse中看到值的分配(用于调试目的)?

2 个答案:

答案 0 :(得分:1)

1)那是Java Ternary Operator。对于带赋值的if / else语句,它是等效的简写。

2)bestScore正在初始化为特定于应用程序的无效值,表明尚未为其分配有效值。在这种情况下,当第一次通过循环时,它将被分配第一个得分值。

3)是的,你可以在eclipse中逐步浏览你的应用程序。有很多Tutorials on the web

答案 1 :(得分:0)

?:是三元声明。它是等同于if语句的简写。如果表达式为true或false,它将设置变量的值。

示例: variable = expression ? value-if-true : value-if-false

将Eclipse设置为调试模式,您可以逐步完成逻辑。这将有助于你破译什么是什么。看一下这个tutorial