工作上的案子要開發個AS小遊戲,除了要能計算自己的BMI,還要算出自己的BMI最近接近哪個明星的BMI。一開始的想法是找如何要二分法陣列,再進行遞迴比對,反正就是想很多…浪費了很多時間,腦子愈來愈不靈光了。(小P:你從來就沒靈光過)。不過經過google了一些文章,從這篇文章有了一些想法。原來要從陣列中搜尋最接近輸入值的元素方法其實比想像中的簡單許多,大概的作法就是。
  1. 把「輸入值」加至比對陣列中
  2. 將排序陣列(降幕或升幕都可)
  3. 找到此輸入值在陣列中的索引值
  4. 比對陣列中(索引值-1)和(索引值+1)值的絕對值,最小的就是答案了
下列是概念上的範例程式:
//假設五個明星的BMI
var starBMI:Array = [22.3, 20, 28.3, 24.2, 32.1];
//假設自己的BMI
var myBMI:Number = 33;

//1) 把「輸入值」加至比對陣列中
starBMI.push(myBMI);

//2) 將排序陣列(降幕或升幕都可)
starBMI.sort();

//3) 找到此輸入值在陣列中的索引值
for (var index in starBMI) {
	if (starBMI[index] == myBMI) {
		break;
	}
}

//4) 比對陣列中(索引值-1)和(索引值+1)值的絕對值。
//   這邊要考慮如果輸入值落於排序中的第一個或最後個的情況
var val:Number;
index = parseInt(index);
if (index == 0) {
	val = starBMI[1];
} else if (index >= (starBMI.length-1)) {
	val = starBMI[(starBMI.length-2)];
} else {
	var after:Number = starBMI[index+1];
	var before:Number = starBMI[index-1];
	if (Math.abs(after-myBMI) < Math.abs(before-myBMI)) {
		val = after;
	} else {
		val = before;
	}
}
//顯示結果
trace('接近值:'+val);

低溫烘培 發表在 痞客邦 PIXNET 留言(0) 人氣()