2014-01-09 6 views
0

Привета Я нашел следующий код для сравнения набора отпечатков пальцев:Как следующий метод работает

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

в qestion в основном на линиях

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

что знак вопроса делают на этих строк кода?

2) зачем нужно минус один в follwing строки коды ется абстрактными лучшим показателем отпечатков пальцев

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

3) есть способ увидеть назначение значений в затмении (для целей отладки)?

+0

Сделайте поиск google-оператора троичного оператора. Если уж на то пошло, поиск google «вопросительный знак java» дал бы вам результаты. Вы не должны просто копировать-вставлять код, который вы найдете в Интернете, и надеяться на лучшее. Вы должны понять, что он делает в первую очередь. И вы спрашиваете об отладке в eclipse? Если это так, для вас есть другое ключевое слово google. –

+0

1) Тернарный оператор. 2) Не знаю, это выбор реализации, на который мы не были включены. 3) Да, вы можете выполнить свою программу в режиме отладки и использовать контрольные точки (и Watch) для просмотра переменных их значений в промежуточных точках во время выполнения. –

ответ

1

1) Это Java Ternary Operator. Это эквивалентная сокращенная инструкция if/else с присваиванием.

2) bestScore инициализируется недопустимым значением для приложения, чтобы указать, что ему еще не присвоено действительное значение. В этом случае, когда первый раз через цикл ему будет присвоено первое значение оценки.

3) Да, вы можете выполнить свое приложение в затмении. Есть много Tutorials on the web

0

?: является тройным заявлением. Это сокращенный эквивалент заявления if. Он установил значение переменной, если выражение истинно или ложно.

Пример:variable = expression ? value-if-true : value-if-false

набор Eclipse, в режиме отладки, и вы можете пройти через логику. Это поможет вам расшифровать то, что есть. Взгляните на это tutorial.

Смежные вопросы