其實這幾個詞代表的是乙個意思,只是不同的叫法,所謂魔法數值是指在**中直接出現的數值,只有在這個數值記述的那部分**中才能明確了解其含義。而在程式設計領域指的是莫名其妙出現的數字,數字的意義必須通過詳細閱讀才能推斷出來。一般魔法數字都是需要使用列舉變數來替換的
魔法數值使**的可讀性大大下降。而且,如果同樣的數值多次出現時,到底這些數值是不是帶有同樣的含義呢,誰也說不清楚。另一方面,如果本來應該使用相同數值的地方,一旦用錯了,也很難發現。因此,需要注意以下幾點,極力避免使用魔法數值。
① 不使用魔法數值,代之以有名字的static final或者enum值
② 原則上,數值就是魔法數值
舉個例子:
但是,0,作為陣列的最小下標是經常使用的。
for( int i = 0; i < table.leerrorth(); i++ )
讀到這裡,讀者都會認為這裡的0是陣列的最小下標,所以在這裡不認為0是魔法數值。另外,0經常被作為變數初始化的預設值,這時候一般也不認為0是魔法數值。通過使用有名字的值,一方面可以提高**的可讀性,另一方面,也可以把變更的地方區域性化,從而提高可維護性。
舉個例子:
魔法數字的例子:
int pricetable = new int[16]; //error:這個16究竟有何含義呢?
使用了帶名字的數值的例子:
static final int price_table_max = 16; //帶名字
int price table = new int [price_table_max]; //名字的含義是很清楚的
魔法數字 problem Bfs搜尋
魔法數字 a.pas c cpp 時間限制 1.0s,空間限制131072 kb 題目描述 給乙個六位數a 和另外乙個六位數b.你有一根魔法棒,初始時指向a 的最左邊數字,每一次你可以選擇下列操作 之一 1.將當前魔杖指向的數字與最左端的乙個數字調換位置。2.將當前魔杖指向的數字與最右端的乙個數字調...
NOIP模擬 魔法數字
在數論領域中,人們研究的基礎莫過於數字的整除關係。一般情況下,我們說整除總在兩個數字間進行,例如 a b a能整除b 表示 b 除以 a 的餘數為 0 我們稱乙個數字 x 是魔法的,當且僅當 x 是整數,且它能被 k 及 k 以上種一位數整除,要求這若干種一位數均在 x 的十進位制表示中出現。給出整...
記錄 C 程式設計魔法數字6174
乙個四位數的魔法數字。描述 第一步 乙個四位數拆分每一位,成四個數字 第二步 用第一步拆分的四個數子組成乙個最大四位數和乙個最小四位數 第三步 用第二步中的最大數減去最小數,之差等於6174則第一步原始四位數是魔法數字 否則將差進行第一步操作,依次迴圈,當迴圈15次之後不再迴圈。created by...