您好我发现以下代码用于比较一组指纹:
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中看到值的分配(用于调试目的)?
答案 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。