1. 程式人生 > 其它 >nchu-software-oop-2022-3

nchu-software-oop-2022-3

一.前言

本次題目題量適中,難度偏大,知識點比較多

題目:7-1 點線形系列1-計算兩點之間的距離 (10 分)

輸入連個點的座標,計算兩點之間的距離

輸入格式:

4個double型別的實數,兩個點的x,y座標,依次是x1、y1、x2、y2,兩個點的座標之間以空格分隔,每個點的x,y座標以英文“,”分隔。例如:0,0 1,1或0.1,-0.3 +3.5,15.6。
若輸入格式非法,輸出"Wrong Format"。
若輸入格式合法但座標點的數量超過兩個,輸出“wrong number of points”。

輸出格式:

計算所得的兩點之間的距離。例如:1.4142135623730951

輸入樣例:

整數輸入。例如:

0,0 1,1
 

輸出樣例:

在這裡給出相應的輸出。例如:

1.4142135623730951
 

輸入樣例1:

帶符號double型別實數輸入。例如:

+2,-2.3 0.9,-3.2
 

輸出樣例1:

在這裡給出相應的輸出。例如:

1.42126704035519
 

輸入樣例2:

格式非法。例如:

++2,-2.3 0.9,-3.2
 

輸出樣例2:

在這裡給出相應的輸出。例如:

Wrong Format
 

輸入樣例3:

點的數量超過兩個。例如:

+2,-2.3 0.9,-3.2 +2,-2.3
 

輸出樣例3:

在這裡給出相應的輸出。例如:

wrong number of points

題目:7-2 點線形系列2-線的計算

使用者輸入一組選項和資料,進行與直線有關的計算。選項包括:
1:輸入兩點座標,計算斜率,若線條垂直於X軸,輸出"Slope does not exist"。
2:輸入三個點座標,輸出第一個點與另外兩點連線的垂直距離。
3:輸入三個點座標,判斷三個點是否在一條線上,輸出true或者false。
4:輸入四個點座標,判斷前兩個點所構成的直線與後兩點構成的直線是否平行,輸出true或者false.
5:輸入四個點座標,計算輸出前兩個點所構成的直線與後兩點構成的直線的交點座標,x、y座標之間以英文分隔",",並輸出交叉點是否在兩條線段之內(不含四個端點)的判斷結果(true/false),判斷結果與座標之間以一個英文空格分隔。若兩條線平行,沒有交叉點,則輸出"is parallel lines,have no intersection point"。

輸入格式:

基本格式:選項+":"+座標x+","+座標y+" "+座標x+","+座標y。
例如:1:0,0 1,1
如果不符合基本格式,輸出"Wrong Format"。
如果符合基本格式,但輸入點的數量不符合要求,輸出"wrong number of points"。
不論哪個選項,如果格式、點數量都符合要求,但構成任一條線的兩個點座標重合,輸出"points coincide",

輸出格式:

見題目描述。

輸入樣例1:

選項1,兩點重合。例如:

1:-2,+5 -2,+5
 

輸出樣例:

在這裡給出相應的輸出。例如:

points coincide
 

輸入樣例2:

選項1,斜率無窮大的線。例如:

1:-2,3 -2,+5
 

輸出樣例:

在這裡給出相應的輸出。例如:

Slope does not exist
 

輸入樣例3:

選項1,斜率無窮大。例如:

1:-2,3 -2,+5
 

輸出樣例:

在這裡給出相應的輸出。例如:

Slope does not exist
 

輸入樣例4:

選項1,符合格式輸入,帶符號/不帶符號數混合。例如:

1:-2.5,3 -2,+5.3
 

輸出樣例:

在這裡給出相應的輸出。例如:

4.6
 

輸入樣例5:

選項2,計算第一個點到另外兩點連線的垂直距離。例如:

2:0,1 1,0 2,0
 

輸出樣例:

在這裡給出相應的輸出。例如:

1.0
 

輸入樣例6:

選項3,判斷三個點是否在一條線上。例如:

3:0,1 2,2 5,3
 

輸出樣例:

在這裡給出相應的輸出。例如:

false
 

輸入樣例7:

選項4,判斷兩條線是否平行。例如:

4:0,1 0,2 2,1 3,0 
 

輸出樣例:

在這裡給出相應的輸出。例如:

false
 

輸入樣例8:

選項5,判斷兩條線的交點。例如:

5:0,0 -1,-1 0,2 3,-1
 

輸出樣例:

在這裡給出相應的輸出,交點座標之間以英文","分隔,判斷結果與座標之間以一個英文空格分隔。例如:

1.0,1.0 true
 

輸入樣例9:

選項5,判斷兩條線的交點。但兩條線平行例如:

5:0,0 -1,-1 2,3 3,4
 

輸出樣例:

在這裡給出相應的輸出,交點座標之間以英文","分隔,判斷結果與座標之間以一個英文空格分隔。例如:

is parallel lines,have no intersection point
題目:7-3 點線形系列3-三角形的計算 

使用者輸入一組選項和資料,進行與三角形有關的計算。選項包括:
1:輸入三個點座標,判斷是否是等腰三角形、等邊三角形,判斷結果輸出true/false,兩個結果之間以一個英文空格符分隔。
2:輸入三個點座標,輸出周長、面積、重心座標,三個引數之間以一個英文空格分隔,座標之間以英文","分隔。
3:輸入三個點座標,輸出是鈍角、直角還是銳角三角形,依次輸出三個判斷結果(true/false),以一個英文空格分隔,
4:輸入五個點座標,輸出前兩個點所在的直線與三個點所構成的三角形相交的交點數量,如果交點有兩個,則按面積大小依次輸出三角形被直線分割成兩部分的面積。若直線與三角形一條線重合,輸出"The point is on the edge of the triangle"
5:輸入四個點座標,輸出第一個是否在後三個點所構成的三角形的內部(輸出in the triangle/outof triangle)。
必須使用射線法,原理:由第一個點往任一方向做一射線,射線與三角形的邊的交點(不含點本身)數量如果為1,則在三角形內部。如果交點有兩個或0個,則在三角形之外。若點在三角形的某條邊上,輸出"on the triangle"

輸入格式:

基本格式:選項+":"+座標x+","+座標y+" "+座標x+","+座標y。點的x、y座標之間以英文","分隔,點與點之間以一個英文空格分隔。

輸出格式:

基本輸出格式見每種選項的描述。
異常情況輸出:
如果不符合基本格式,輸出"Wrong Format"。
如果符合基本格式,但輸入點的數量不符合要求,輸出"wrong number of points"。
如果輸入的三個點無法構成三角形,輸出"data error"。
注意:輸出的資料若小數點後超過6位,只保留小數點後6位,多餘部分採用四捨五入規則進到最低位。小數點後若不足6位,按原始位數顯示,不必補齊。例如:1/3的結果按格式輸出為 0.333333,1.0按格式輸出為1.0

選項4中所輸入線的兩個點座標重合,輸出"points coincide",

輸入樣例1:

選項4,定義線的兩點重合。例如:

4:1,0 1,0 0,0 2,0 4,0
 

輸出樣例:

在這裡給出相應的輸出。例如:

points coincide
 

輸入樣例2:

選項4,構成三角形的三個點在一條線上,無法構成三角形。例如:

4:1,0 0,2 0,0 0,0 4,0
 

輸出樣例:

在這裡給出相應的輸出。例如:

data error
 

輸入樣例3:

選項1,判斷等腰、等邊三角形。例如:

1:-2,0 2,0 0,4
 

輸出樣例:

兩個判斷結果。例如:

true false
 

輸入樣例4:

選項2,輸出邊長、面積、重心座標。例如:

2:0,0 3,0 0,1
 

輸出樣例:

在這裡給出相應的輸出。例如:

7.162278 1.5 1.0,0.333333
 

輸入樣例5:

選項3,鈍角、直角、銳角的判斷。例如:

3:0,1 1,0 2,0
 

輸出樣例:

在這裡給出相應的輸出。例如:

true false false
 

輸入樣例6:

選項4,直線與三角形交點的數量等於2,輸出數量值以及三角形被分割的兩部分面積。例如:

4:1,0 0,2 0,0 0,2 4,0
 

輸出樣例:

在這裡給出相應的輸出。例如:

2 1.0 3.0
 

輸入樣例7:

選項4,直線與三角形交點的數量少於兩個,只輸出數量值。例如:

4:-1,0 1,2 0,1 0,-1 2,0
 

輸出樣例:

在這裡給出相應的輸出。例如:

1
 

輸入樣例8:

選項5,用射線法判斷點是否在三角形內部。例如:

5:0.5,0.5 0,0 0,2 4,0
 

輸出樣例:

在這裡給出相應的輸出,交點座標之間以英文","分隔,判斷結果與座標之間以一個英文空格分隔。例如:

in the triangle
 

輸入樣例9:

選項5,用射線法判斷點是否在三角形內部。例如:

5:0,0 -1,-1 2,3 3,4
 

輸出樣例:

在這裡給出相應的輸出。例如:

outof the triangle


本次題目知識點有:
1.類的繼承與多型:

關於繼承與多型:
面向物件的三大特徵:封裝性、繼承性、多型性
繼承是多型的前提,如果沒有繼承,就沒有多型。

特點:
1、子類可以擁有父類的“內容”
2、子類還可以擁有自己專有的新內容
3、單繼承:一個類的直接父類只能有唯一一個
4、可以多級繼承,有多個子類

在繼承關係當中,“子類就是一個父類”。也就是說,子類可以被當作父類看待

例如:
父類是員工,子類是講師,那麼“講師就是一個員工”。關係:is-a

在父子類的繼承關係中,如果成員變數重名,則建立子類物件時,訪問有兩種方式:
1、直接通過子類物件訪問成員變數: 等號左邊是誰,就優先用誰,沒有則向上找
2、間接通過成員方法訪問成員變數:該方法定義在哪個類中,就優先用誰,沒有則向上找。 注意:不會向下找,因為子類知道父類,而父類不知道子類,(例如段正淳)

對於子類成員方法來說:
區域性變數:直接寫
本類成員變數:this.變數名稱
父類成員變數:super.成員變數

在父子類的繼承關係當中,建立子類物件,訪問成員方法的規則:
建立的物件是誰,就優先用誰,如果沒有就向上找 注意: 無論是成員方法還是成員變數,如果沒有都是向上找父類,絕不會向下找子類

重寫(Override):在繼承關係中,方法名稱一樣,引數列表也一樣

區別: 重寫(Override):方法名稱一樣,引數列表 也一樣 【覆蓋、覆寫】
過載(Overload):方法名稱一樣,引數列表 不一樣

注意:
1、必須保證父子類之間方法的名稱相同,引數列表也相同
@Override :寫在方法前面,用來檢測是不是有效的正確覆蓋重寫(可選,只是用於檢測)
2、子類方法的返回值必須小於等於父類方法的返回值範圍
java.lang.Object 類是所有類的公共最高父類(祖宗類),java.lang.String 就是Object的子類
3、子類方法的許可權必須大於等於父類方法的許可權修飾符 public > protected > (default) > private
備註:(default) 不是關鍵字default,,而是什麼都不寫,留空

繼承關係中,父子類構造方法的訪問特點:
1、子類構造方法當中有一個預設的”super();“呼叫,所以一定是先呼叫父類構造,後執行子類構造
2、子類構造可以通過super呼叫父類過載構造
3、super的父類構造呼叫,必須是子類構造方法的第一個語句。不能一個子類構造呼叫多次super構造
總結:子類必須呼叫父類構造方法,不寫則贈送一個super();寫了則用寫的指定的super呼叫,而且super只能有一個,還必須在第一個
————————————————
版權宣告:本文為CSDN博主「沐景a」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處連結及本宣告。
原文連結:https://blog.csdn.net/mujing11/article/details/115335816


2.正則表示式:

正則表示式簡介


正則表示式是由一些具有特殊含義的字元組成的字串,多用於查詢、替換符合規則的字串。在表單驗證、Url對映等處都會經常用到。


一、元字元


元字元:即為有特定含義的字元,常見的元字元如下


常用的元字元
程式碼 說明
. 匹配除換行符以外的任意字元
\w 匹配字母或數字或下劃線或漢字
\s 匹配任意的空白符
\d 匹配數字
\b 匹配單詞的開始或結束
^ 匹配字串的開始(在集合字元裡[^a]表示非(不匹配)的意思
$ 匹配字串的結束
詳解和示例:


(1). 匹配任何任意字元 例如 . 可以匹配 1,n,*,+,- ,等


(2)\d\w\s 匹配第一個字元為數字,第二個字元為字母或數字、或下劃線或漢字,第三字元為空格的字串 例如:11 ,2a , 1_


(3)^\d\d\d$ 匹配三個全部都為數字的字串 例如: 123,456,789


還可以用於驗證輸入的字串是否符合qq(身份證號)的驗證 :


例如:^\d{8}$ 匹配8位數字的qq號,^\d{15}&匹配15位均為數字的身份證號


(4)\bOlive\b 匹配單詞Olive 例如: I Love Oliver and Olive .這個時候返回的是Olive 而不是Oliver,因為\b....\b返回的匹配的單詞


二、反義字元


反義字元:多用於查詢除某個字元以外其他任意字元均可以的情況


常用的反義字元如下:


常用的反義字元
程式碼/語法 說明
\W 匹配任意不是字母,數字,下劃線,漢字的字元
\S 匹配任意不是空白符的字元
\D 匹配任意非數字的字元
\B 匹配不是單詞開頭或結束的位置
[^x] 匹配除了x以外的任意字元
[^aeiou] 匹配除了aeiou這幾個字母以外的任意字元
詳解和示例:


(1)\W 匹配除字母、數字、下劃線、漢字以為的字元形如 +,-,*


(2)\S 匹配除空格以外的任意字元形如:1,* ,)


(3)[^abcde]匹配除abcde以為的其他字元 如 e,f,g,h


三、限定字元


限定字元多用於重複匹配次數


常用的限定字元如下


常用的限定符
程式碼/語法 說明
* 重複零次或更多次
+ 重複一次或更多次
? 重複零次或一次
{n} 重複n次
{n,} 重複n次或更多次
{n,m} 重複n到m次
詳解和示例:


(1)\d* 匹配重複0次或多次數字 例如:可能為空 或 任意數字 (2,3。。。。)


(2)\d+ 匹配重複1次或多次數字 例如:可能為1個或多個數字 1,23,234,2345,........


(3)\d? 匹配重複次個或者一次數字 例如:可能為空或者任意的一個數字(1,2,。。。)


(4)\d{8}匹配重複8次數字 例如:123456768


(5)\d{4,}匹配重複至少4次數字 例如:1234,12345,124244,。。。。。


(6)^\d{8,11}$ 匹配重複8-11次數字 例如:12345678,123456789,1234567890,12345678901


四、轉義字元


在實際的開發中,可能會遇到要比配元字元的情況,這個時候就需要進行字元轉義,如元字元 . * \ 需要轉換為\. \* \\


例如: 需要匹配qq郵箱 \d{8,}+qq+\.+com 在這裡的. 就需要加斜槓


五、字元分枝


字元分枝多用於滿足不同情況的選擇,用“|”將不同的條件分割開來,比如有些固定電話區號有三位,有些有四位,這個時候可以採用字元分枝


例如:\d{3}-\d{8}|\d{4}-\d{8} 可以匹配兩種不同長度區號的固定電話


下邊的IP地址正則表示式也有用到字元分枝


六、字元分組


字元分組多用於將多個字元重複,主要通過使用小括號()來進行分組


形如:(\d\w){3} 重複匹配3次(\d\w)


常用於表示IP地址 形如: ((25[0-5]|2[0-4][0-9]|[0-1]\d\d)\.){3}(25[0-5]|2[0-4][0-9]|[0-1]\d\d)


解析:先把IP地址分為兩部分一部分是123.123.123. 另一部分是123,又因Ip最大值為255,所以先使用分組,然後在組裡邊再進行選擇,組裡也有三部分,0-199,200-249,250-255,分別和上述的表達是對應,最後還要注意分組之後還要加上一個.,因為是元字元所以要轉義故加上\. 然後再把這部分整體看做是一個組,重複三次,再加上僅有數字的一組也就是不帶\.的那一組即可完成IP地址的校驗


常用分組語法


用分組語法
分類 程式碼/語法 說明
捕獲 (exp) 匹配exp,並捕獲文字到自動命名的組裡
(?<name>exp) 匹配exp,並捕獲文字到名稱為name的組裡,也可以寫成(?'name'exp)
(?:exp) 匹配exp,不捕獲匹配的文字,也不給此分組分配組號
零寬斷言 (?=exp) 匹配exp前面的位置
(?<=exp) 匹配exp後面的位置
(?!exp) 匹配後面跟的不是exp的位置
(?<!exp) 匹配前面不是exp的位置
註釋 (?#comment) 這種型別的分組不對正則表示式的處理產生任何影響,用於提供註釋讓人閱讀
七、懶惰匹配和貪婪匹配


貪婪匹配:正則表示式中包含重複的限定符時,通常的行為是匹配儘可能多的字元。


懶惰匹配,有時候需要匹配儘可能少的字元。


例如: a.*b,它將會匹配最長的以a開始,以b結束的字串。如果用它來搜尋aabab的話,它會匹配整個字串aabab。但是我們此時可能需要匹配的是ab這樣的話就需要用到懶惰匹配了。懶惰匹配會匹配儘可能少的字元


常用的懶惰匹配限定符如下


懶惰限定符
程式碼/語法 說明
*? 重複任意次,但儘可能少重複
+? 重複1次或更多次,但儘可能少重複
?? 重複0次或1次,但儘可能少重複
{n,m}? 重複n到m次,但儘可能少重複
{n,}? 重複n次以上,但儘可能少重複
八、後向引用


後向引用用於重複搜尋前面某個分組匹配的文字。


使用小括號指定一個子表示式後,匹配這個子表示式的文字(也就是此分組捕獲的內容)可以在表示式或其它程式中作進一步的處理。預設情況下,每個分組會自動擁有一個組號,規則是:從左向右,以分組的左括號為標誌,第一個出現的分組的組號為1,第二個為2,以此類推


示例:\b(\w+)\b\s+\1\b可以用來匹配重複的單詞,像go go, 或者kitty kitty。


這個表示式首先是一個單詞,也就是單詞開始處和結束處之間的多於一個的字母或數字(\b(\w+)\b),這個單詞會被捕獲到編號為1的分組中,然後是1個或幾個空白符(\s+),最後是分組1中捕獲的內容(也就是前面匹配的那個單詞)(\1)。


你也可以自己指定子表示式的組名。要指定一個子表示式的組名,請使用這樣的語法:(?<Word>\w+)(或者把尖括號換成'也行:(?'Word'\w+)),這樣就把\w+的組名指定為Word了。要反向引用這個分組捕獲的內容,你可以使用\k<Word>,所以上一個例子也可以寫成這樣:\b(?<Word>\w+)\b\s+\k<Word>\b


九、零寬斷言


有時候需要查詢某些匹配之前或之後的東西,這個時候就需要用到們像\b,^,$那樣用於指定一個位置,這個位置應該滿足一定的條件(即斷言),因此它們也被稱為零寬斷言


(?=exp)也叫零寬度正預測先行斷言,它斷言自身出現的位置的後面能匹配表示式exp。比如\b\w+(?=ing\b),匹配以ing結尾的單詞的前面部分(除了ing以外的部分),如查詢I'm singing while you're dancing.時,它會匹配sing和danc。


(?<=exp)也叫零寬度正回顧後發斷言,它斷言自身出現的位置的前面能匹配表示式exp。比如(?<=\bre)\w+\b會匹配以re開頭的單詞的後半部分(除了re以外的部分),例如在查詢reading a book時,它匹配ading。


十、其他語法


.NET常用的處理選項
名稱 說明
IgnoreCase(忽略大小寫) 匹配時不區分大小寫。
Multiline(多行模式) 更改^和$的含義,使它們分別在任意一行的行首和行尾匹配,而不僅僅在整個字串的開頭和結尾匹配。(在此模式下,$的精確含意是:匹配\n之前的位置以及字串結束前的位置.)
Singleline(單行模式) 更改.的含義,使它與每一個字元匹配(包括換行符\n)。
IgnorePatternWhitespace(忽略空白) 忽略表示式中的非轉義空白並啟用由#標記的註釋。
ExplicitCapture(顯式捕獲) 僅捕獲已被顯式命名的組。
其他語法
程式碼/語法 說明
\a 報警字元(列印它的效果是電腦嘀一聲)
\b 通常是單詞分界位置,但如果在字元類裡使用代表退格
\t 製表符,Tab
\r 回車
\v 豎向製表符
\f 換頁符
\n 換行符
\e Escape
\0nn ASCII程式碼中八進位制程式碼為nn的字元
\xnn ASCII程式碼中十六進位制程式碼為nn的字元
\unnnn Unicode程式碼中十六進位制程式碼為nnnn的字元
\cN ASCII控制字元。比如\cC代表Ctrl+C
\A 字串開頭(類似^,但不受處理多行選項的影響)
\Z 字串結尾或行尾(不受處理多行選項的影響)
\z 字串結尾(類似$,但不受處理多行選項的影響)
\G 當前搜尋的開頭
\p{name} Unicode中命名為name的字元類,例如\p{IsGreek}
(?>exp) 貪婪子表示式
(?<x>-<y>exp) 平衡組
(?im-nsx:exp) 在子表示式exp中改變處理選項
(?im-nsx) 為表示式後面的部分改變處理選項
(?(exp)yes|no) 把exp當作零寬正向先行斷言,如果在這個位置能匹配,使用yes作為此組的表示式;否則使用no
(?(exp)yes) 同上,只是使用空表示式作為no
(?(name)yes|no) 如果命名為name的組捕獲到了內容,使用yes作為表示式;否則使用no
(?(name)yes) 同上,只是使用空表示式作為no
十一、常用的實用正則表示式整理(摘自自學程式設計網)


只能輸入數字:"^[0-9]*$"。


  只能輸入n位的數字:"^"d{n}$"。


  只能輸入至少n位的數字:"^"d{n,}$"。


  只能輸入m~n位的數字:。"^"d{m,n}$"


  只能輸入零和非零開頭的數字:"^(0|[1-9][0-9]*)$"。


  只能輸入有兩位小數的正實數:"^[0-9]+(.[0-9]{2})?$"。


  只能輸入有1~3位小數的正實數:"^[0-9]+(.[0-9]{1,3})?$"。


  只能輸入非零的正整數:"^"+?[1-9][0-9]*$"。


  只能輸入非零的負整數:"^"-[1-9][]0-9"*$。


  只能輸入長度為3的字元:"^.{3}$"。


  只能輸入由26個英文字母組成的字串:"^[A-Za-z]+$"。


  只能輸入由26個大寫英文字母組成的字串:"^[A-Z]+$"。


  只能輸入由26個小寫英文字母組成的字串:"^[a-z]+$"。


  只能輸入由數字和26個英文字母組成的字串:"^[A-Za-z0-9]+$"。


  只能輸入由數字、26個英文字母或者下劃線組成的字串:"^"w+$"。


  驗證使用者密碼:"^[a-zA-Z]"w{5,17}$"正確格式為:以字母開頭,長度在6~18之間,只能包含字元、數字和下劃線。


  驗證是否含有^%&’,;=?$""等字元:"[^%&’,;=?$"x22]+"。


  只能輸入漢字:"^["u4e00-"u9fa5]{0,}$"


  驗證Email地址:"^"w+([-+.]"w+)*@"w+([-.]"w+)*"."w+([-.]"w+)*$"。


  驗證InternetURL:"^http://(["w-]+".)+["w-]+(/["w-./?%&=]*)?$"。


  驗證電話號碼:"^("("d{3,4}-)|"d{3.4}-)?"d{7,8}$"正確格式為:"XXX-XXXXXXX"、"XXXX- XXXXXXXX"、"XXX-XXXXXXX"、"XXX-XXXXXXXX"、"XXXXXXX"和"XXXXXXXX"。


  驗證身份證號(15位或18位數字):"^"d{15}|"d{18}$"。


  驗證一年的12個月:"^(0?[1-9]|1[0-2])$"正確格式為:"01"~"09"和"1"~"12"。


  驗證一個月的31天:"^((0?[1-9])|((1|2)[0-9])|30|31)$"正確格式為;"01"~"09"和"1"~"31"。


  利用正則表示式限制網頁表單裡的文字框輸入內容:


  用正則表示式限制只能輸入中文:οnkeyup="value=value.replace(/[^"u4E00-"u9FA5] /g,’’)" onbeforepaste="clipboardData.setData(’text’,clipboardData.getData(’text’).replace(/[^"u4E00-"u9FA5]/g,’’))"


  用正則表示式限制只能輸入全形字元: οnkeyup="value=value.replace(/[^"uFF00-"uFFFF]/g,’’)" onbeforepaste="clipboardData.setData(’text’,clipboardData.getData(’text’).replace(/[^"uFF00-"uFFFF]/g,’’))"


  用正則表示式限制只能輸入數字:οnkeyup="value=value.replace(/[^"d]/g,’’) "onbeforepaste="clipboardData.setData(’text’,clipboardData.getData(’text’).replace(/[^"d]/g,’’))"


  用正則表示式限制只能輸入數字和英文:οnkeyup="value=value.replace(/["W]/g,’’) "onbeforepaste="clipboardData.setData(’text’,clipboardData.getData(’text’).replace(/[^"d]/g,’’))"


  得用正則表示式從URL地址中提取檔名的javascript程式,如下結果為page1


以下是引用片段:
s="http://www.9499.net/page1.htm"
s=s.replace(/(.*"/){0,}([^".]+).*/ig,"$2")
alert(s)
  匹配雙位元組字元(包括漢字在內):[^"x00-"xff]


  應用:計算字串的長度(一個雙位元組字元長度計2,ASCII字元計1)


以下是引用片段:
String.prototype.len=function(){return this.replace([^"x00-"xff]/g,"aa").length;}
  匹配空行的正則表示式:"n["s| ]*"r


  匹配HTML標記的正則表示式:/<(.*)>.*<"/"1>|<(.*) "/>/


  匹配首尾空格的正則表示式:(^"s*)|("s*$)


以下是引用片段:
String.prototype.trim = function()
{
return this.replace(/(^"s*)|("s*$)/g, "");
}
  利用正則表示式分解和轉換IP地址:


  下面是利用正則表示式匹配IP地址,並將IP地址轉換成對應數值的Javascript程式:


以下是引用片段:
function IP2V(ip)
{
re=/("d+)".("d+)".("d+)".("d+)/g //匹配IP地址的正則表示式
if(re.test(ip))
{
return RegExp.$1*Math.pow(255,3))+RegExp.$2*Math.pow(255,2))+RegExp.$3*255+RegExp.$4*1
}
else
{
throw new Error("Not a valid IP address!")
}
}
不過上面的程式如果不用正則表示式,而直接用split函式來分解可能更簡單,程式如下:


以下是引用片段:
var ip="10.100.20.168"
ip=ip.split(".")
alert("IP值是:"+(ip[0]*255*255*255+ip[1]*255*255+ip[2]*255+ip[3]*1))
————————————————
版權宣告:本文為CSDN博主「墨遙」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處連結及本宣告。
原文連結:https://blog.csdn.net/xuemoyao/article/details/8033138

二.設計與分析
三題為層層遞進的關係,第一題先構造一個point類,用來儲存點的x和y,以及用來計算點之間的距離,
還有一個judge類用來判斷輸入的數字,以及格式是否正確

而第二題要構造一個line類,裡面包含point類。在構造一個Slope類,用來計算直線的斜率k,以及判斷直線是否相交,平行,垂直,以及垂直x軸,
還有一個judge類用來判斷輸入的數字,以及格式是否正確

第三題同理,構造triangle類包含line類,還有一個judge類用來判斷輸入的數字,以及格式是否正確。

三.踩坑心得

import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Main
{
public static void main( String[] args ){

Scanner in = new Scanner(System.in);
String num = in.nextLine();

String Str= "(([+|-]?[1-9]+([\\\\.][0-9]+|[0-9]*)|([+|-]?[0]([\\\\.][0-9])?))[,]([+|-]?[1-9]+([\\\\.][0-9]+|[0-9]*)|([+|-]?[0]([\\\\.][0-9])?))\"\r\n"
+ " + \"[\\\\s]{1})+(([+|-]?[1-9]+([\\\\.][0-9]+|[0-9]*)|([+|-]?[0]([\\\\.][0-9])?))[,]([+|-]?[1-9]+([\\\\.][0-9]+|[0-9]*)|([+|-]?[0]([\\\\.][0-9])?)))+";
String Str1="([+|-]?[0-9]+([\\\\.][0-9]+|[0-9]*)[,][+|-]?[0-9]+([\\\\.][0-9]+|[0-9]*)\"\r\n"
+ " + \"[\\\\s]{1})([+|-]?[0-9]+([\\\\.][0-9]+|[0-9]*)[,][+|-]?[0-9]+([\\\\.][0-9]+|[0-9]*))";
double[]number = new double[4];

Pattern s = Pattern.compile(Str);
Matcher m = s.matcher(num);

Pattern s1 = Pattern.compile(Str);
Matcher m1 = s1.matcher(num);
if( m.matches())
{
double result = Math.sqrt((number[2]-number[0])*(number[2]-number[0])+(number[3]-number[1])*(number[3]-number[1]));
System.out.print(result);

}
else
{
if(m1.matches())
System.out.print("wrong number of points");
else
System.out.print("Wrong Format");
}
for(;m.find();)
{
for(int j=0;j<4;j++)
{
number[j] = Double.parseDouble(m.group(j+1));

}
}
}
}

其中for(;m.find();)迴圈有倆測試點過不去,此時的for迴圈應該為while(m.find())。

四.改進

我這三題程式碼,沒用用到類,應該為以上題目分析中一樣,用類來寫題目。

五.總結

在這題中我學到了類的構造,類的繼承與多型的關係。也學會了正則表示式的使用,知識點參照前言中的知識點分析。