范例(Examples)
下面范例中我要計(jì)算一個(gè)蘇格蘭布?。╤aggis)運(yùn)動(dòng)的距離。在起點(diǎn)處,靜止的蘇格蘭布丁會(huì)受到一個(gè)初始力的作用而開始運(yùn)動(dòng)。一段時(shí)機(jī)后,第二個(gè)力作用于布丁,讓它再次加速。根據(jù)牛頓第二定律,我可以這樣計(jì)算布丁運(yùn)動(dòng)的距離:
double getDistanceTravelled(int time) {
double result;
double acc = _primaryForce / _mass;
int primaryTime = Math.min(time, _delay);
result = 0.5 * acc * primaryTime * primaryTime;
int secondaryTime = time - _delay;
if(secondaryTime > 0) {
double primaryVel = acc * _delay;
acc = (_primaryForce + _secondaryForce) / _mass;
result += primaryvel * secondaryTime + 0.5 * acc * secondaryTime * secondaryTime;
}
return result;
}
acc變量有兩個(gè)責(zé)任:第一是保存第一個(gè)力造成的初始加速度;第二是保存兩個(gè)力共同造成的加速度。這就是我想要剖解的東西。
首先,我在函數(shù)開始處修改這個(gè)臨時(shí)變量的名稱,并將新的臨時(shí)變量聲明為final。接下來我把第二次賦值之前對(duì)acc變量的所有引用點(diǎn),全部改用新的臨時(shí)變量。最后,我在第二次賦值處重新聲明acc變量:
double getDistanceTravelled(int time) {
double result;
final double primaryAcc = _primaryForce / _mass;
int primaryTime = Math.min(time, _delay);
result = 0.5 * primaryAcc * primaryTime * primaryTime;
int secondaryTime = time - _delay;
if(secondaryTime > 0) {
double primaryVel = primaryAcc * _delay;
double acc = (_primaryForce + _secondaryForce) / _mass;
result += primaryvel * secondaryTime + 0.5 * acc * secondaryTime * secondaryTime;
}
return result;
}
新的臨時(shí)變量的名稱指出,它只承擔(dān)原先acc變量的第一責(zé)任。我將它聲明為final,確保它只被賦值一次。然后,我在原先acc變量第二次被賦值處重新聲明acc?,F(xiàn)在,重新編譯并測(cè)試,一切都應(yīng)該沒有問題。
然后,我繼續(xù)處理acc臨時(shí)變量的第二次賦值。這次我把原先的臨時(shí)變量完全刪掉,代之以一個(gè)新的臨時(shí)變量。新變量的名稱指出,它只承擔(dān)原先acc變量的第二個(gè)責(zé)任:
double getDistanceTravelled(int time) {
double result;
final double primaryAcc = _primaryForce / _mass;
int primaryTime = Math.min(time, _delay);
result = 0.5 * primaryAcc * primaryTime * primaryTime;
int secondaryTime = time - _delay;
if(secondaryTime > 0) {
double primaryVel = primaryAcc * _delay;
final double secondaryAcc = (_primaryForce + _secondaryForce) / _mass;
result += primaryvel * secondaryTime + 0.5 * secondaryAcc * secondaryTime * secondaryTime;
}
return result;
}
下面范例中我要計(jì)算一個(gè)蘇格蘭布?。╤aggis)運(yùn)動(dòng)的距離。在起點(diǎn)處,靜止的蘇格蘭布丁會(huì)受到一個(gè)初始力的作用而開始運(yùn)動(dòng)。一段時(shí)機(jī)后,第二個(gè)力作用于布丁,讓它再次加速。根據(jù)牛頓第二定律,我可以這樣計(jì)算布丁運(yùn)動(dòng)的距離:
double getDistanceTravelled(int time) {
double result;
double acc = _primaryForce / _mass;
int primaryTime = Math.min(time, _delay);
result = 0.5 * acc * primaryTime * primaryTime;
int secondaryTime = time - _delay;
if(secondaryTime > 0) {
double primaryVel = acc * _delay;
acc = (_primaryForce + _secondaryForce) / _mass;
result += primaryvel * secondaryTime + 0.5 * acc * secondaryTime * secondaryTime;
}
return result;
}
acc變量有兩個(gè)責(zé)任:第一是保存第一個(gè)力造成的初始加速度;第二是保存兩個(gè)力共同造成的加速度。這就是我想要剖解的東西。
首先,我在函數(shù)開始處修改這個(gè)臨時(shí)變量的名稱,并將新的臨時(shí)變量聲明為final。接下來我把第二次賦值之前對(duì)acc變量的所有引用點(diǎn),全部改用新的臨時(shí)變量。最后,我在第二次賦值處重新聲明acc變量:
double getDistanceTravelled(int time) {
double result;
final double primaryAcc = _primaryForce / _mass;
int primaryTime = Math.min(time, _delay);
result = 0.5 * primaryAcc * primaryTime * primaryTime;
int secondaryTime = time - _delay;
if(secondaryTime > 0) {
double primaryVel = primaryAcc * _delay;
double acc = (_primaryForce + _secondaryForce) / _mass;
result += primaryvel * secondaryTime + 0.5 * acc * secondaryTime * secondaryTime;
}
return result;
}
新的臨時(shí)變量的名稱指出,它只承擔(dān)原先acc變量的第一責(zé)任。我將它聲明為final,確保它只被賦值一次。然后,我在原先acc變量第二次被賦值處重新聲明acc?,F(xiàn)在,重新編譯并測(cè)試,一切都應(yīng)該沒有問題。
然后,我繼續(xù)處理acc臨時(shí)變量的第二次賦值。這次我把原先的臨時(shí)變量完全刪掉,代之以一個(gè)新的臨時(shí)變量。新變量的名稱指出,它只承擔(dān)原先acc變量的第二個(gè)責(zé)任:
double getDistanceTravelled(int time) {
double result;
final double primaryAcc = _primaryForce / _mass;
int primaryTime = Math.min(time, _delay);
result = 0.5 * primaryAcc * primaryTime * primaryTime;
int secondaryTime = time - _delay;
if(secondaryTime > 0) {
double primaryVel = primaryAcc * _delay;
final double secondaryAcc = (_primaryForce + _secondaryForce) / _mass;
result += primaryvel * secondaryTime + 0.5 * secondaryAcc * secondaryTime * secondaryTime;
}
return result;
}