Java實驗研究報告_第1頁
Java實驗研究報告_第2頁
Java實驗研究報告_第3頁
Java實驗研究報告_第4頁
Java實驗研究報告_第5頁
已閱讀5頁,還剩13頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、Java語言程序設(shè)計實驗報告實驗序號:3實驗項目名稱: 熟練java語法、常用方法、程序結(jié)構(gòu)學 號xx姓 名xx專業(yè)、班電子商務(wù)1002實驗地點xx指導教師xx時間2012.4.26一、實驗目的及要求1、進一步熟練Java語法和常用方法的使用;2、進一步熟練Java程序結(jié)構(gòu);3、進一步提高算法設(shè)計與實現(xiàn)的能力;4、為后續(xù)章節(jié)的學習打下堅實的基礎(chǔ);二、實驗設(shè)備(環(huán)境)實驗室計算機、windows xp系統(tǒng)、myeclipse三、實驗內(nèi)容與步驟.隨機生成100個0到200的整數(shù),用折半查找法(二分法)查找50是第幾個數(shù),并 輸出查找過程(即和什么數(shù)進行了比較)。(折半查找是在已經(jīng)排序的數(shù)據(jù)中做的查

2、找,所以先要排序).顯示任意一個月份的日歷(1900)(一周一行,要有月名、表頭和橫線。按列右對齊,用 String.format(%1$ 4d,intNumber)可以將任意整數(shù) intNumber 格式化成前面補“空格”的4位定長字符串).顯示出任一年份的日歷(1900).用數(shù)組模擬實現(xiàn)一個50個字符串的堆棧,并使這個堆棧有如下方法和參數(shù): myStack:數(shù)組名,使用時不能直接對這個數(shù)組進行存取操作,存取操作都通過pop()和push()完成。實現(xiàn)pop():彈出實現(xiàn)push():壓入實現(xiàn)isFull():是否已滿實現(xiàn)isEmpty():是否為空實現(xiàn)length():已有多少元素要點:要

3、將代碼設(shè)計成有通用性,也就是說要考慮各種可能的情況,考 慮越多,你的程序就越穩(wěn)定可靠,高可靠性的代碼一直是一個開發(fā)人員 追求的最高目標之一。.使用堆棧,將中綴算術(shù)表達式轉(zhuǎn)換成后綴表達式。a)表達式中只有十、一、X, /, %,(,)六種運算符b)變量名為以英文字母開頭的字母數(shù)字用c)表達式中可以出現(xiàn)不帶符號的常數(shù)d)適當判斷表達式中的語法錯誤e)不計算結(jié)果f)參考:(算法描述).若遇到的是數(shù)字或小數(shù)點, 則直接寫入到strResult中(strResult為結(jié)果字符串); 2.若遇到的是左括號,則應把它壓入到運算符棧中;若遇到的是右括號,把從棧頂直到保存著的對應左括號之間的運算符依次退棧并寫入

4、 strResult 串中;若遇到的是運算符:當該運算符的優(yōu)先級大于棧頂運算符的優(yōu)先級時,進棧若遇到的運算符的優(yōu)先級小于或等于棧頂運算符的優(yōu)先級,這表明棧頂運算符的兩個運算對象已經(jīng)被保存到 strResult 串中,應將棧頂運算符退棧并寫入到strResult 串中,對于新的棧頂運算符仍繼續(xù)進行比較和處理,直到被處理的運算符的優(yōu)先級大于棧頂運算符的優(yōu)先級為止,然后讓該運算符進棧即可。四、實驗結(jié)果與數(shù)據(jù)處理程序代碼:import ;import ;import ;public class experiment_3static int intInputValue;static String str

5、InputValue;static int length;public static void main(String args) random();/ 第 1 題隨機數(shù)排序查找的功能calendar();/ 第二題日歷的功能String myString=new String; 請輸入合法的中綴表達式:);if(getStringInput(myString)MidfixToSuffix(myString0);static void random()int anArray;anArray=new int1002;/二維數(shù)組,存取隨機數(shù)和其固定編號for(int i=0;i100;i+) an

6、Arrayi0=(int)(Math.random()*200)+1;/產(chǎn)生 100 個在 1-200之間的隨機數(shù)anArrayi1=i+1; 隨機產(chǎn)生的數(shù)為: );for(int i=0;i100;i+)/打印排序前的隨機數(shù)%1$ 5d,anArrayi0);if(i+1)%20=0);BobbleSort(anArray);/調(diào)用排序函數(shù)對隨機數(shù)進行排序 排序后的數(shù)為: ); for(int i=0;i100;i+)%1$ 5d,anArrayi0);if(i+1)%20=0) ;int num=BinarySearch(anArray,50,anArray.length);/的下標,沒有

7、則為-1; if(num0;i-)if(anArrayi0=50) );/ 輸出該數(shù)為第幾個數(shù)for(int i=m+1;i100;i+)if(anArrayi0=50) );/ 輸出該數(shù)為第幾個數(shù) 個數(shù) );/ 輸出該數(shù)為第幾個數(shù) static int BinarySearch(int arr,int searchkey,int n)/ 法int low=0;int high=n-1; 和50 比較過的數(shù)依次為: ); while(lowarrmid0)elselow=mid+1;high=mid-1;return -1;static void BobbleSort(int arr)/ 冒泡

8、法排序 int i,j,change;change=1;j=arr.length-1;while(j0&change=1) change=0;for(i=0;iarri+10)/ int temp1=arri0;int temp2=arri1; arri0=arri+10;arri1=arri+11; arri+10=temp1; arri+11=temp2;change=1;j-;將隨機數(shù)和其編號同時交換static void calendar()int year1=0;int month1=0;if(getIntegerInput(year1=intInputValue;請輸入要查詢?nèi)諝v的

9、年月 +r+ 年份 )if(getIntegerInput(month1=intInputValue;月份 )Output(year1,month1);/對特定的 year1 和 month1 的日歷輸出int year2=0;if(getIntegerInput(請輸入要查詢的全年日歷的年份 )year2=intInputValue;for(int i=1;i=12;i+)Output(year2,i);/調(diào)用同一個函數(shù),進2012 年的 12 個月的日歷輸出static void Output(int year,int month)/輸出函數(shù)int totalDays=0;for(int

10、y=1901;yyear;y+)for(int m=1;m=12;m+) totalDays+=Day(y,m);for(int m=1;mmonth;m+)totalDays+=Day(year,m);/ +year+ 年+month+); 日一二int week=Week(totalDays);/int day=Day(year,month);/for(int i=0;iweek%7;i+) );/ 打印 1 號前的空格for(int i=1;i=day;i+)%1$ 4d,i);if(i+week)%7=0) /;r);static int Week(int days)/int week

11、=1,2,3,4,5,6,7;/int day_1991_1_1=week1;/int theweek=week(days+1)%7;return theweek;static int Day(int year,int month)/int numDays=0;在月 );/ 打印表頭和橫線三 四 五 六);表示當前月的第一天的星期當前月的天數(shù)依次打印出一個月的日期計算某一天的星期經(jīng)查找, 1901 年1 月 1 日是星期二用來確定任意一年任意一月的天數(shù)switch(month)case 1:case 3:case 5:case 10:case 12:numDays=31;/ 大月的情況 bre

12、ak;case 4:case 6:case 9:case 11:numDays=30;/ 小月的情況 break;case 2:/ 閏年的情況if(year%4=0)&!(year%100=0)|(year%400=0)numDays=29;elsenumDays=28;break;return numDays;static boolean isEmpty(char stack)/ if (length=0)return true;return false;static boolean isFull(char stack)/if (length=50)return true;return fa

13、lse;static int Length(char stack)/return length;static char getTop(char stack) /if (isEmpty(stack)return 0;elsereturn stackLength(stack) - 1;static void pop(char stack) /if (isEmpty(stack)return ;length-;return ;返回棧中元素個數(shù)返回棧頂元素出棧判斷棧是否為空判斷棧是否為滿入棧static boolean push(char stack, char aChar)/ if (isFull(

14、stack)return false;stacklength+ = aChar;return true;static void MidfixToSuffix(String s)char myStack=new char50; 其后綴表達式為: );for (int i = 0; i s.length(); i+)if (s.charAt(i) = + | s.charAt(i) = - | s.charAt(i)= *| s.charAt(i) = /| s.charAt(i) = %| s.charAt(i) = (| s.charAt(i)= )/ 如果是運算符則進一步判斷 );while

15、 (true) if (s.charAt(i) = () /是左括號則直接進棧push(myStack,s.charAt(i);break;else if (s.charAt(i) = ) /是右括號則棧中左括號上面的所有符號依次出棧while (getTop(myStack) != () );pop(myStack);pop(myStack);break;else if (isEmpty(myStack)|getTop(myStack) = ()push(myStack, s.charAt(i);break;else if (s.charAt(i) = * | s.charAt(i) = /

16、 |s.charAt(i) = %)& (getTop(myStack) = + | getTop(myStack)= -)/ 根據(jù)運算符的優(yōu)先級判斷,如果是高優(yōu)先級進棧push(myStack, s.charAt(i); break; else ;pop(myStack); else/ 運算變量直接輸出 ;while (!isEmpty(myStack) /將棧中剩余的運算符直接輸出 ;pop(myStack);static boolean getIntegerInput(String aPrompt) /返回值輸入值/ 若返回 false ,則輸入出錯,輸入的值不能用。若返回 true ,

17、輸入正確,輸入值可以 用int anInteger=0;String strInput=null; try : );BufferedReader br=new BufferedReader(new InputStreamReader(System.in);strInput=br.readLine();anInteger=Integer.parseInt(strInput); catch(IOException e)IO 錯誤!請重新運行程序。 ); return false; catch(NumberFormatException e) 你的輸入可能有格式錯誤!請重新運行程序。 ); retu

18、rn false;intInputValue=anInteger;return true;static boolean getStringInput(String str)/ String strInput=null;boolean isInputMistake = false;try InputStreamReader(/ 請輸入一個字符串: );BufferedReader br = new BufferedReader(new System.in);str0 = br.readLine(); catch (IOException e) isInputMistake = true;/ IO

19、 錯誤!請重新運行程序。 );return !isInputMistake;程序運行的結(jié)果: (復制到word 中排版變混亂了)隨機產(chǎn)生的數(shù)為: TOC o 1-5 h z 154192521844777310942133 16448177 89 120 76 115 64 120 13014341178127843101598134 1491851041 26 85 89 43 168 14612121681431825510191121155 5714179 54 106 158 140 99 197 151654 15925 127 93 117103 473659810 44 164

20、104 140 157 192 1825156 7650 23 195 12483 1501603751193 89 87 190 70 124 151 176排序后的數(shù)為:17881010121415 16 18 23 252526343637414243434447 47 48 50 5152545455575959646870737676818385 87 89 89 899399101103104104106109115117120120121121124124 127 127 130133140140143143146149150151154155156157158159160164

21、 164 168 176177178179182184185190191192192193195197和 50 比較過的數(shù)依次為:99 47 68 54 51 48 5050 是排序前的第85 個數(shù)請輸入要查詢?nèi)諝v的年月年份:2012月份:42012 年4月日一二1 2 3 4 5 6 78 9 10 11 12 13 1415 16 17 18 19 20 2122 23 24 25 26 27 2829 30請輸入要查詢的全年日歷的年份:2012 年1 月三四五六2012日一1 2 3 4 5 6 78 9 10 11 12 13 1415 16 17 18 19 20 2122 23 2

22、4 25 26 27 2829 30 312012 年2月三四五六日一1 2 3 45 67 8 9101112 13141516171819 20212223242526 2728292012 年3月三四五六日一1 2 34 56 7 891011 12131415161718 19202122232425 2627282930312012 年4月三四五六日一1 2 3 4 5 6 78 9 10 11 12 13 1415 16 17 18 19 20 21三四五六29 302012 年5月日一二三四1 2 3 4 56 7 8 9 10 11 1213 14 15 16 17 18 19

23、20 21 22 23 24 25 2627 28 29 30 312012 年6月五六日一二三四1 23 45 6 78910 11121314151617 18192021222324 2526272829302012 年7月五六日一二三四1 2 3 4 5 6 78 9 10 11 12 13 1415 16 17 18 19 20 2122 23 24 25 26 27 2829 30 312012 年8月五六日一二三四1 2 3 45 6 7 8 9 10 1112 13 14 15 16 17 1819 20 21 22 23 24 2526 27 28 29 30 312012

24、年9月五六日一二三四12 345 6789 10111213141516 17181920212223 242526272829302012 年10月五六五六五六一二三1五六日一二三1 2 3 4 5 67 8 9 10 11 12 13 TOC o 1-5 h z 14 15161718192021 22232425262728 2930312012年11月日一二三1 2 34 5 6 7 8 9 1011 12 13 14 15 16 1718 19 20 21 22 23 2425 26 27 28 29 302012 年12月2 3 4 5 6 7 89 10 11 12 13 14

25、1516 17 18 19 20 21 2223 24 25 26 27 28 2930 31請輸入合法的中綴表達式:9+(8*5-6)%6-8/3其后綴表達式為: 9 8 5 *6 - 6 %+8 3/-數(shù)據(jù)處理: 第 1題:定義一個二維數(shù)組,用來存儲產(chǎn)生的隨機數(shù)和初始的編號,當用冒泡法排序的時候, 其固定的編號也隨之移動, 再用二分查找法查找50的時候, 將下標為mid的數(shù)輸出即為依次比較過的數(shù),如果找到50則將其編號輸出即為其排序前所在的位置, 如果沒找到則輸出提示信息。 這道題的主要問題在于, 如果產(chǎn)生了若干個 50, 如何都能打印出來, 采用的方法是將二分查找出的第一個50的當前下標,再前后搜索還有沒有50了,有就輸出對應的原始下標。第 2、 3 題:我采用的是以 1991 年 1 月 1 日為基礎(chǔ),查詢出該天是星期幾,再根據(jù)每一年中 12 個月分的天數(shù),要注意2 月分平年和閏年的相差一天的區(qū)別,計算出輸入的年月的第一天是距,總天數(shù)mod7就可以得出第一天是周幾,輸出日歷和時候就可以從計算出的星期幾開始, 依次打印出該月的所有天, 第七個一行,第 3 題也就是將第 2 題的程序按照 1-12 月循環(huán)執(zhí)行12 次就可以得出最終的結(jié)果了。第4、5題:這道題的關(guān)鍵是定義一個棧和一個數(shù)組,其中棧用來存放運算符

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論