1、分成三類:整數 小數,指數
2、找到公用的判斷邏輯比如空判斷,去空格判斷等等放在抽象類中
3、給三類定義成三個判斷類,
4、主方法在呼叫的時候,依次去使用三個判斷類去執行即可
此外還有狀態機的判斷方法,但是我的狀態圖不知道怎麼下手≥。<。
inte***ce
numbervalidate
// 抽象類中定義用來檢查一些公共的操作,是否為空,去掉首尾空格,去掉 +/- 每個具體的分類器去呼叫,
//每個分類器的具體邏輯使用dovalidate去實現
abstract
class
numbervalidatetemplate
implements
numbervalidate
s =checkandprocessheader
(s);
if(s.
length()
==0)return
dovalidate
(s);
}private
boolean
checkstringempty
(string s)
return
false;}
private string checkandprocessheader
(string value)
return value;
}protected
abstract
boolean
dovalidate
(string s);}
//實現 dovalidate 判斷是否是整數
class
integervalidate
extends
numbervalidatetemplate
}return
true;}
}//實現 dovalidate 判斷是否是科學計數法
class
sienceformatvalidate
extends
numbervalidatetemplate
if(s.
length()
==1) string first = s.
substring(0
, pos)
; string second = s.
substring
(pos+
1, s.
length()
);if(
validatepartbeforee
(first)
==false
||validatepartaftere
(second)
==false
)return
true;}
private
boolean
validatepartbeforee
(string first)if(
checkheadandendforspace
(first)
==false
) numbervalidate integervalidate =
newintegervalidate()
; numbervalidate floatvalidate =
newfloatvalidate()
;if(integervalidate.
validate
(first)
==false
&& floatvalidate.
validate
(first)
==false
)return
true;}
private
boolean
checkheadandendforspace
(string part)
return
true;}
private
boolean
validatepartaftere
(string second)if(
checkheadandendforspace
(second)
==false
) numbervalidate integervalidate =
newintegervalidate()
;if(integervalidate.
validate
(second)
==false
)return
true;}
}//實現 dovalidate 判斷是否是小數
class
floatvalidate
extends
numbervalidatetemplate
if(floatval.
length()
==1) numbervalidate nv =
newintegervalidate()
; string first = floatval.
substring(0
, pos)
; string second = floatval.
substring
(pos +
1, floatval.
length()
);if(
checkfirstpart
(first)
==true
&&checkfirstpart
(second)
==true
)return
false;}
private
boolean
checkfirstpart
(string first)
return
true;}
private
boolean
checkpart
(string part)
numbervalidate nv =
newintegervalidate()
;if(nv.
validate
(part)
==false
)return
true;}
}//定義乙個執行者,我們把之前實現的各個類加到乙個陣列裡,然後依次呼叫
public
class
numbervalidator
implements
numbervalidate
private
void
addvalidators()
@override
public
boolean
validate
(string s)
}return
false;}
public
boolean
isnumber
(string s)
}
劍指offer 面試題20
題目 從外向裡順時針列印矩陣 做題心得 該題本質上並未考查複雜的資料結構及演算法,而是考查了快速找規律的能力!要想作出此題,必須先有絕對清晰的思路,否則越寫越亂 因為涉及到很多的迴圈列印 自己當時的思路基本符合作者提供的思路 先考慮怎麼列印一圈 四個迴圈 再考慮如何結束列印 和作者的意圖不太一樣,自...
劍指Offer面試題20 表示數值的字串
請實現乙個函式用來判斷字串是否表示數值 包括整數和小數 例如,字串 100 5e2 123 3.1416 和 1e 16 都表示數值。但是 12e 1a3.14 1.2.3 5 和 12e 4.3 都不是。解題思路 關鍵點是 表示數值得字串遵循的模式a b e ec 或者.b e ec 其中a為數值...
劍指Offer 面試題20(表示數值的字串)
這裡是引用 題目描述 請實現乙個函式用來判斷字串是否表示數值 包括整數和小數 例如,字串 100 5e2 123 3.1416 及 1e 16 都表示數值,但 12e 1a3.14 1.2.3 5 及 12e 5.4 都不是。示例 include bool scanunsignedinteger c...