今天老師為了讓體驗設計模式布置了一道自動雨刷的問題,題目大致是汽車雨刷的速度控制由lever和dial控制,關係如下表:
手動實現的部分較為簡單,題目中還提供了類圖
只需要按照類圖實現類和方法就行了,但是題目有公升級,要自動雨刷,根據雨量自動調節雨刷速度。
雨量和速度的關係如下圖:
其中雨量的資料是要求由程式自動生成的符合正態分佈的一組資料。
這個之前還真的沒見過,在網上搜尋也只告訴我在random類中有nextgaussian()這樣乙個方法可以生成
題目要求是生成0到100之間的30個資料。
於是我想了很久,最後寫出了這樣的一段**。
public int getnum()
}for (int i = 0; i < 30; i++)
}return numarr;
}
因為是題目給定的範圍所以像重複1200次這些都是自己試出來的。
(5 * random.nextgaussian() + 15,這句中的5和15代表的方差和均值。
又因為我只需要30個資料所以只去了0到29之間的數進行統計。
統計結果單個超過100的就封頂到100。
於是拿到了合適的資料像這樣
142
7131018
3249
5470
7485
9693
10086
8782
5449
4525
221199442
接下來就是自動控制的部分。
因為自動控制還是要基於手動控制,在lever和dial類中沒有提供set方法來直接指定lever和dial的值,所以我們要根據雨量來模擬調整操作。
第一步肯定是先實現兩個方法來了解根據當前的雨量,lever和dial應該是多少。**如下:
static public int checklever(int n) else if (n >= 1 && n <= 45) else if (n >= 46 && n <= 80) else if (n >= 81 && n <= 100)
return lever;
}static public int checkdial(int n, int now) else if (n >= 16 && n <= 30) else if (n >= 31 && n <= 45) else
return dial;
}
然後判斷現在的lever和dial值與應該的值有沒有差,差多少,差多少就迴圈使用up或down的方法幾次。直到把30次資料都過完。**如下。
for (int i = 0; i < 30; i++)
} else }}
if (dpos - tdial != 0)
} else }}
agent.dealspeed();
// system.out.println(arr[i] + "," + agent.getspeed());
str = str.concat(arr[i] + "," + agent.getspeed() + "\r\n");
}
最後題目要求輸入到檔案中,這個就很簡單了。
然後就完成了。
雨刷問題及相關課程作業總結
雨刷問題及相關課程作業總結 近幾周學習內容,課程方面包括物件導向七大設計原則 雨刷問題 作業方面則包括pta,及實驗題,現對上述學習內容進行階段性總結如下。雨刷問題 由雨刷問題開始的七大設計原則 第一次雨刷1.0 課上給出了雨刷系統的基本運作模式,根據司機對控制桿,刻度盤的調節,改變雨刷的狀態 主要...
梅花雨網頁日曆控制項 問題
梅花雨網頁日曆控制項是乙個不錯的日曆控制項,在網頁上使用很方便,不過在用vs2005開發時碰到了一些問題 1.出現未結束的字串常量 這個問題一般是編碼引起的,vs2005中預設的網頁是utf 8編碼的,而這個日曆是gb2312的編碼,所以出錯了,有2個解決辦法 乙個是在應用js檔案的時候指定編碼為g...
python 自動刷伺服器
code python coding utf 8 import cookielib import mechanize import urllib br mechanize.browser cj cookielib.lwpcookiejar br.set cookiejar cj br.open 需要...