国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于JAVA的發(fā)射角計(jì)算工具的研究與開發(fā)

2015-05-08 18:30:44胡景豫
電腦知識(shí)與技術(shù) 2015年7期

胡景豫

摘要:根據(jù)實(shí)際工作需要,使用JAVA語(yǔ)言開發(fā)了一款射角修正計(jì)算軟件,該文詳細(xì)介紹了開發(fā)過程使用的界面設(shè)計(jì)、對(duì)話框構(gòu)建、內(nèi)部類等技術(shù)方法。經(jīng)實(shí)踐檢驗(yàn),該軟件在試驗(yàn)現(xiàn)場(chǎng)使用非常方便,極大的提高了工作效率。

關(guān)鍵詞:發(fā)射角計(jì)算;JAVA;軟件工具

中圖分類號(hào):TP311 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1009-3044(2015)07-0105-03

Abstract: According to the practical needs in firing setting, launch angle calculation system is developed based on JAVA. This paper aims at introducing the techniques used in the process of development, including the design of interface, the construction of dialog box and the use of inner class. Proved in a practical firing setting situation, the platform features in easy-learning and easy-using, and improves the efficiency in firing setting.

Key words: launch angle; JAVA; application tool

某型火炮在陸上射擊考核過程中由于受到試驗(yàn)場(chǎng)地的限制,為了確保安全性和便于觀測(cè)性,必須精準(zhǔn)控制連發(fā)射擊時(shí)的彈著點(diǎn),對(duì)射擊完目標(biāo)彈之后火炮射角的調(diào)整提出了較高的技術(shù)要求。

彈丸落點(diǎn)位置主要由發(fā)射時(shí)火炮的方向、高低角度確定,并受氣象條件影響,通常確定連發(fā)射擊射角的方法是:報(bào)告目標(biāo)彈落點(diǎn)后,提出連續(xù)射擊時(shí)彈著點(diǎn)理想位置。提供涉及射角的計(jì)算參數(shù)主要有兩個(gè),分別是下一組射擊理想落點(diǎn)與目標(biāo)彈落點(diǎn)的坐標(biāo)距離和目標(biāo)彈的射程,由于試驗(yàn)現(xiàn)場(chǎng)條件所限,修正射角的計(jì)算過程通常由技術(shù)人員使用近似公式、通過計(jì)算器計(jì)算獲得,使用近似公式和計(jì)算過程數(shù)據(jù)的舍入,使計(jì)算結(jié)果有一定的誤差,且計(jì)算過程比較復(fù)雜緩慢。

如果能將計(jì)算過程編成軟件,使用時(shí)只需輸入基本數(shù)據(jù),直接得到計(jì)算結(jié)果,整個(gè)工作效率會(huì)得到較大提高,射擊間隔時(shí)間縮短,兩組射擊時(shí)氣象條件基本相同,彈丸外彈道飛行條件近似一致,落點(diǎn)會(huì)更加精準(zhǔn)?,F(xiàn)階段智能手機(jī)的使用已非常普便,基于Lunix內(nèi)核Android操作系統(tǒng)的手機(jī)使用人群也比較龐大[1],如果軟件能夠安裝在Android手機(jī)上,在基礎(chǔ)設(shè)施條件受限的試驗(yàn)場(chǎng),更能發(fā)揮出該軟件作用。

1 圖形交互界面布局設(shè)計(jì)

為了使軟件不僅能在電腦上運(yùn)行而且在手機(jī)上也能運(yùn)行,所以軟件開發(fā)環(huán)境選擇EclipseADT,如果使用者通過智能手機(jī)軟件完成計(jì)算工作,需要軟件有一個(gè)簡(jiǎn)潔易操作的圖形交互界面并響應(yīng)用戶操作。軟件編寫過程中使用了布局類、視圖容器類和普通視圖等組件,并使用XML語(yǔ)言控制這些組件的相互位置。定義Android系統(tǒng)視圖的XML文件保存在工程項(xiàng)目res\layout目錄中[2]。

TextView控件用來顯示文本,在程序中用來提示用戶在正確位置輸入文本,TextView控件顯示的文本在程序中不在變化,只需要在XML布局文件確定TextView控件的id、width、height、text屬性。

在用戶輸入文本的位置選擇使用EditText控件,EditText是TextView子類,在EditText控件設(shè)計(jì)過程需要考慮用戶可能輸入錯(cuò)誤數(shù)據(jù)的情況,為了有效避免使用者輸入錯(cuò)誤數(shù)據(jù),在輸入風(fēng)格屬性中指定只允許輸入浮點(diǎn)數(shù),不允許輸入文字,為計(jì)算過程提供有效的過濾屏障。

設(shè)置好文本控件與可編輯文本控件后,在整體的垂直布局中插入水平布局用于容納“計(jì)算”、“刷新”、“退出”三個(gè)按鈕,讓三個(gè)按鈕整齊的排列在輸入文本控件下方。這需要在布局XML文件中順序安排好每個(gè)控件的標(biāo)簽,并注意到在同一個(gè)布局文件中相同控件控件的id不能相同,以免程序無(wú)法讀取后續(xù)id相同的控件,在虛擬機(jī)運(yùn)行結(jié)果如圖1所示:

2 用戶數(shù)據(jù)交互實(shí)現(xiàn)技術(shù)

帶界面的Android應(yīng)用程序必須由一個(gè)或多個(gè)活動(dòng)組件用來顯示界面,在活動(dòng)組件控制區(qū)域可以放置其它組件。為構(gòu)建界面區(qū)域程序中設(shè)計(jì)了一個(gè)JSActivity類擴(kuò)展于Activity核心類,并覆蓋其中的onCreate方法,在該方法中初始化用戶界面區(qū)域,通過setContentView方法讀取工程目錄中的布局文件,方法參數(shù)是布局文件的資源id。成功讀取布局文件之后可以繼續(xù)讀取布局文件中組件的id,在使用JAVA語(yǔ)言主程序代碼中對(duì)組件進(jìn)行初始化并對(duì)其內(nèi)容進(jìn)行控制,如從文本區(qū)域讀取用戶輸入,響應(yīng)用戶點(diǎn)擊按鈕的動(dòng)作,反饋計(jì)算結(jié)果等。

程序中輸入?yún)?shù)只有兩個(gè),但內(nèi)容格式是文本形式,不能直接用于程序計(jì)算,程序中使用getText()方法讀取用戶在文本區(qū)域輸入的值,該方法返回是一個(gè)Editable對(duì)象,通過查閱API文檔可知,這個(gè)對(duì)象只是一個(gè)可編輯的代碼單元,還不是字符串,需要使用Editable對(duì)象的toString()方法轉(zhuǎn)換成字符串,此時(shí)讀取的數(shù)據(jù)還不是JAVA語(yǔ)言中基本數(shù)值類型,不能用于計(jì)算,利用雙精度類型包裝器中的靜態(tài)方法,將用戶輸入轉(zhuǎn)換成雙精度浮點(diǎn)數(shù),具體代碼如下:

sc=Double.parseDouble(e1.getText().toString()); xzjl=Double.parseDouble(e2.getText().toString());

程序使用者在輸入正確數(shù)據(jù)后點(diǎn)擊計(jì)算按鈕后會(huì)彈出對(duì)話框顯示計(jì)算結(jié)果,用戶得到計(jì)算結(jié)果后通常會(huì)選擇重新計(jì)算或者直接退出程序,為實(shí)現(xiàn)這兩種功能,使用了帶兩個(gè)按鈕的對(duì)話框控件,一個(gè)按鈕執(zhí)行重新計(jì)算操作另一個(gè)執(zhí)行退出程序操作。這兩個(gè)按鈕被點(diǎn)擊的時(shí)候,在程序中使用回調(diào)方法響應(yīng)用戶動(dòng)作,主程序JAVA代碼中為對(duì)話框兩個(gè)按鈕注冊(cè)監(jiān)聽器,監(jiān)聽器對(duì)象必須是實(shí)現(xiàn)了DialogInterface.OnClickListener接口的對(duì)象,由于對(duì)話框按鈕需要實(shí)現(xiàn)重新計(jì)算和退出程序的功能,這兩種功能都需要訪問主程序JSActivity類中的域,故將兩個(gè)對(duì)話框監(jiān)聽器類設(shè)計(jì)成JSActivity類中的內(nèi)部類,分別在onClick方法實(shí)現(xiàn)用戶點(diǎn)擊操作后的動(dòng)作,最后將監(jiān)聽器對(duì)象傳遞給對(duì)話框設(shè)置按鈕的setPositiveButton和setNegativeButton方法,內(nèi)部類具體實(shí)現(xiàn)技術(shù)詳見代碼:

程序中除了使用了一個(gè)活動(dòng)組件還使用了多個(gè)對(duì)話框組件,用來顯示計(jì)算結(jié)果和提示用戶進(jìn)行正確的操作,在設(shè)計(jì)上為防止用戶輸入錯(cuò)誤數(shù)據(jù),在文本域設(shè)置了只能輸入數(shù)值的條件,還有一種情況就是用戶什么也不輸入,直接點(diǎn)擊計(jì)算按鈕,這樣計(jì)算過程將得不到任何數(shù)據(jù),程序拋RUNTIME類型異常,程序直接退出,為了避免這種情況的發(fā)生,在運(yùn)行程序時(shí)判斷文本區(qū)域getText方法返回可編輯對(duì)象的正確性,通過達(dá)爾維克透視圖監(jiān)視該語(yǔ)句在調(diào)試過程中的值,用if語(yǔ)句判斷用戶輸入的正確性,如果用戶在可編輯文本組件中不輸入就任何數(shù)值的情況下就點(diǎn)擊了計(jì)算按鈕,程序?qū)棾鰧?duì)話框提示用戶輸入數(shù)據(jù)。

在Android程序中使用對(duì)話框需要通過AlertDialog類來構(gòu)建,因?yàn)锳lertDialog類的構(gòu)造方法是受保護(hù)的方法,在代碼中不能使用關(guān)鍵字new來創(chuàng)建AlertDialog對(duì)象,但可以通過其內(nèi)部類Builer來創(chuàng)建,用Builer類的create方法返回超類AlertDialog對(duì)象,再通過超類show方法顯示對(duì)話框。使用Builer類構(gòu)造方法需要傳遞一個(gè)Context上下文參數(shù),通常只需傳一個(gè)this參數(shù)既可,由于本程序在點(diǎn)擊按鈕后才出現(xiàn)對(duì)話框,在設(shè)計(jì)程序時(shí)將Builer構(gòu)造方法放置在按鈕監(jiān)聽器的內(nèi)部類中,這時(shí)直接使用this參數(shù)傳遞給Builer構(gòu)造器,程序會(huì)拋出異常而終止運(yùn)行。解決這一問題需要將主程序JSActivity類做為Context對(duì)象傳遞給Builer構(gòu)造器,解決代碼如下:

AlertDialog.Builder(JSActivity.this).setTitle("請(qǐng)輸入數(shù)據(jù)").create();

3 清單文件編輯與APK包的制作

一個(gè)Android手機(jī)程序必須有一個(gè)清單文件,文件名為AndroidManifest.xml,在運(yùn)行程序之前要在這個(gè)文件中設(shè)置程序的必要信息,在程序中使用的活動(dòng)組件如本程序使用的JSActivity類需要在清單文件中注冊(cè),設(shè)置應(yīng)用程序圖標(biāo),活動(dòng)窗口名稱,設(shè)置完成后可以進(jìn)行程序調(diào)試。

程序調(diào)試成功后要想使程序在真機(jī)上運(yùn)行,還需對(duì)生成擴(kuò)展名為apk安裝包進(jìn)行簽名,簽名可以使用開發(fā)工具ADT插件附加功能,在導(dǎo)出apk安裝包的過程設(shè)置需要導(dǎo)出應(yīng)用程序的名稱和簽名信息,導(dǎo)出成功后生成已簽完名的apk文件及簽名密鑰,這時(shí)apk文件可以直接傳到手機(jī)上安裝,安裝運(yùn)行后結(jié)果如圖2所示:

4 結(jié)束語(yǔ)

在實(shí)際工作中,修正射角計(jì)算瞬時(shí)完成,且結(jié)果精度可視情況截取,不必在計(jì)算過程中舍取,取得了較好的工作效果。本程序的開發(fā)使用,改變了傳統(tǒng)工作模式,緊隨時(shí)代潮流,利用先進(jìn)技術(shù),使智能手機(jī)在工作中發(fā)揮出本身潛能,在條件比較艱苦的試驗(yàn)現(xiàn)場(chǎng)得到了良好應(yīng)用,降低了技術(shù)門限,任何人都可以使用,還可以與其它計(jì)算方法相互印證,極大的提高了工作效率。

參考文獻(xiàn):

[1] 李寧.Android開發(fā)完全講義[M].北京:中國(guó)水利水電出版社,2012.

[2] 扶松柏,于秀青.Android開發(fā)從入門到精通[M].北京:北京希望電子出版社,2012.

隆化县| 定安县| 平定县| 南通市| 聂拉木县| 泸水县| 木兰县| 安义县| 土默特左旗| 兴海县| 衡东县| 府谷县| 灯塔市| 准格尔旗| 福清市| 涪陵区| 玛纳斯县| 永年县| 平山县| 刚察县| 芦山县| 新化县| 大洼县| 三都| 陆丰市| 偏关县| 拉萨市| 湖南省| 唐海县| 贵州省| 桐城市| 琼结县| 浦城县| 荔波县| 杭锦后旗| 梓潼县| SHOW| 柳河县| 都安| 井研县| 大悟县|