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

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

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

4、把從棧頂直到保存著的對應(yīng)左括號之間的運算符依次退棧并寫入 strResult 串中;4. 若遇到的是運算符:4.1 當(dāng)該運算符的優(yōu)先級大于棧頂運算符的優(yōu)先級時,進棧4.2 若遇到的運算符的優(yōu)先級小于或等于棧頂運算符的優(yōu)先級,這表明棧頂運算 符的兩個運算對象已經(jīng)被保存到 strResult 串中,應(yīng)將棧頂運算符退棧并寫入到 strResult 串中,對于新的棧頂運算符仍繼續(xù)進行比較和處理,直到被處理的運算 符的優(yōu)先級大于棧頂運算符的優(yōu)先級為止,然后讓該運算符進棧即可。四、實驗結(jié)果與數(shù)據(jù)處理程序代碼:import java.io.BufferedReader;import java.io.IOEx

5、ception;import java.io.InputStreamReader;public class experiment_3static int intInputValue;static String strInputValue;static int length;public static void main(String args)random();/第 1 題隨機數(shù)排序查找的功能calendar();/ 第二題日歷的功能String myString=new String""System.out.print(" 請輸入合法的中綴表達式 :"

6、);if(getStringInput(myString)MidfixToSuffix(myString0);static void random()int anArray;anArray=new int1002;/ 二維數(shù)組,存取隨機數(shù)和其固定編號for(int i=0;i<100;i+)anArrayi0=(int)(Math.random()*200)+1;/產(chǎn)生 100 個在 1-200之間的隨機數(shù)anArrayi1=i+1;System.out.println(" 隨機產(chǎn)生的數(shù)為: ");for(int i=0;i<100;i+)/打印排序前的隨機數(shù)S

7、ystem.out.print(String.format("%1$ 5d",anArrayi0);if(i+1)%20=0)System.out.println();BobbleSort(anArray);/ 調(diào)用排序函數(shù)對隨機數(shù)進行排序 System.out.println(" 排序后的數(shù)為: ");for(int i=0;i<100;i+) System.out.print(String.format("%1$ 5d",anArrayi0); if(i+1)%20=0)System.out.println();int nu

8、m=BinarySearch(anArray,50,anArray.length);/ 返回查找到的數(shù) 的下標,沒有則為 -1System.out.println();if(num<0)System.out.println("NO FOUND!");/ 輸出查找失敗信息 elseSystem.out.print("50 是排序前的第 ");/ 輸出該數(shù)為第幾個數(shù) int m=num;for(int i=num;i>0;i-)if(anArrayi0=50)System.out.print(anArrayi1+" ");/

9、輸出該數(shù)為第幾個 數(shù)for(int i=m+1;i<100;i+)if(anArrayi0=50)System.out.print(anArrayi1+" ");/ 輸出該數(shù)為第幾個 數(shù)System.out.println(" 個數(shù) ");/ 輸出該數(shù)為第幾個數(shù)static int BinarySearch(int arr,int searchkey,int n)/二分查找算法int low=0;int high=n-1;System.out.print("和50 比較過的數(shù)依次為: ");while(low<=high)

10、int mid=(low+high)/2;System.out.print(" "+arrmid0);/ 每一次都是下標為 mid 的數(shù)和18 / 1450 比較if(searchkey=arrmid0)return mid;/ 如果找到,返回其編號 elseif(searchkey>arrmid0) low=mid+1;elsehigh=mid-1;return -1;static void BobbleSort(int arr)/int i,j,change; change=1;j=arr.length-1; while(j>0&&chang

11、e=1)change=0;for(i=0;i<j;i+) if(arri0>arri+10)/ int temp1=arri0;int temp2=arri1; arri0=arri+10; arri1=arri+11; arri+10=temp1; arri+11=temp2;change=1;j-;冒泡法排序?qū)㈦S機數(shù)和其編號同時交換static void calendar()int year1=0;int month1=0;if(getIntegerInput(" year1=intInputValue;if(getIntegerInput(" month1

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

13、year,int month)/ int totalDays=0;for(int y=1901;y<year;y+)for(int m=1;m<=12;m+)totalDays+=Day(y,m);for(int m=1;m<month;m+)totalDays+=Day(year,m);/System.out.println(" "+year+"System.out.println("");System.out.println(" 日在 1991.1.1 的基礎(chǔ)上算當(dāng)前日期是第幾天年"+month+&qu

14、ot;月");/打印表頭和橫線一 二 三 四 五六");int week=Week(totalDays);/ int day=Day(year,month);/ for(int i=0;i<week%7;i+)表示當(dāng)前月的第一天的星期當(dāng)前月的天數(shù)System.out.print(" ");/ for(int i=1;i<=day;i+)System.out.print(String.format("%1$ 4d",i); 依次打印出一個月的日期if(i+week)%7=0) /System.out.println();Sy

15、stem.out.println("r");static int Week(int days)/ int week=1,2,3,4,5,6,7;/int day_1991_1_1=week1;/ int theweek=week(days+1)%7;return theweek;打印 1 號前的空格計算某一天的星期經(jīng)查找, 1901 年1月1日是星期二static int Day(int year,int month)/ int numDays=0;switch(month)用來確定任意一年任意一月的天數(shù)case 1:case 3:case 5:case 7:case 8:

16、case 10:case 12:numDays=31;/ 大月的情況break;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 i

17、sFull(char stack)/ if (length=50)return true;判斷棧是否為滿return false; static int Length(char stack)/ return length;返回棧中元素個數(shù)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

18、 ;static boolean push(char stack, char aChar)/入棧if (isFull(stack)return false; stacklength+ = aChar;return true;static void MidfixToSuffix(String s)char myStack=new char50;System.out.println(" 其后綴表達式為: ");for (int i = 0; i < s.length(); i+)if (s.charAt(i) = '+' | s.charAt(i) = &

19、#39;-' | s.charAt(i)= '*'| s.charAt(i) = '/'| s.charAt(i) = '%'| s.charAt(i) = '(' | s.charAt(i) = ')')/ 如果是運算符則進一步判斷System.out.print(" ");while (true) if (s.charAt(i) = '(') / 是左括號則直接進棧push(myStack,s.charAt(i);break;else if (s.charAt(i)

20、= ')') / 是右括號則棧中左括號上面 的所有符號依次出棧while (getTop(myStack) != '(')System.out.print(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) =

21、'/' |s.charAt(i) = '%')&& (getTop(myStack) = '+' | getTop(myStack)= '-')/ 根據(jù)運算符的優(yōu)先級判斷,如果是高優(yōu)先級進棧 push(myStack, s.charAt(i); break;elseSystem.out.print(getTop(myStack); pop(myStack);else/ 運算變量直接輸出System.out.print(s.charAt(i);while (!isEmpty(myStack) / 將棧中剩余的運算符直

22、接輸出System.out.print(getTop(myStack); pop(myStack);static boolean getIntegerInput(String aPrompt) /返回值輸入值/ 若返回 false ,則輸入出錯,輸入的值不能用。若返回 true ,輸入正確,輸入值可以 用int anInteger=0;String strInput=null;trySystem.out.print(aPrompt+" : ");BufferedReader br=new BufferedReader(newInputStreamReader(System.

23、in);strInput=br.readLine();anInteger=Integer.parseInt(strInput); catch(IOException e)System.out.println("IO 錯誤!請重新運行程序。 "); return false; catch(NumberFormatException e)System.out.println(" 你的輸入可能有格式錯誤!請重新運行程序。 "); return false;intInputValue=anInteger;return true;static boolean ge

24、tStringInput(String str)/ String strInput=null;boolean isInputMistake = false;try / System.out.print(" 請輸入一個字符串: ");BufferedReader br = new BufferedReader(new InputStreamReader( System.in);str0 = br.readLine(); catch (IOException e) isInputMistake = true;/ System.out.println("IO 錯誤!請重

25、新運行程序。 ");return !isInputMistake;程序運行的結(jié)果:(復(fù)制到word中排版變混亂了)隨機產(chǎn)生的數(shù)為:154192 52184 47773109421331644817789 12076 1156412013014341 178127 843101598134149185104 1 26 85 89 43 168 14612 121 68 143 182 55 10 191 121 155 57 1417954 10615814099197151654 159251279311710347365981044 164 1041401571921825156

26、76502319512483150160375119389 8719070124151176排序后的數(shù)為:8 1010 12 14 1516 18 23 2525 26 34 3637 41 4243 43 44 47 47 48 50 51 5254545557 59 59 64 68 70 73 7676 81 83 85 87 89 89 89 9399101103104 104 106 109 115 117 120 120121 121 124 124 127 127 130 133140140143143146 149 150 151 154 155 156 157158 159

27、160 164 164 168 176 177178179182184185 190 191 192 192 193195 197和 50 比較過的數(shù)依次為:994768 5451485050 是排序前的第 85 個數(shù) 請輸入要查詢?nèi)諝v的年月 年份: 2012月份: 4日一二三123 45 6 78910 11 12 131415161718 19 202122232425 26 27282930請輸入要查詢的全年日歷的年份:20122012年1月日一二三123 45 6 78910 11 12 131415161718 19 202122232425 26 27282930312012年2月

28、日.二三2012 年4 月四四四1 2 3 45 6 7 8 9 10 1112 13 14 15 16 17 1819 20 21 22 23 24 2526 27 28 292012 年3 月日1 23三四4567 8910111213141516171819202122232425262728293031五六2012年4月日一二三四五六123 45 6 78910 11 12 131415161718 19 202122232425 26 272829302012年5月日一二三四五六1 23 4 56 7 8 910 11 12131415161718192021222324252627

29、282930312012年6月日二三四五六12345 6 7891011121314151617181920212223242526272829302012 年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 31三四五六2012 年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 年9 月五六日 一 二 三 12 3 4 5 6 7 89 10

30、 11 12 13 14 1516 17 18 19 20 21 2223 24 25 26 27 28 2930五六2012 年 10 月日 一 二 三 四1 2 3 4 5 67 8 9 10 11 12 13五六1415161718192021222324252627282930312012 年 11 月日一1 2 3456 7 8910111213 14151617181920 2122232425 26 27 28 29 302012 年 12 月日 一 二 三 四 五 六 12 3 4 5 6 7 89 10 11 12 13 14 1516 17 18 19 20 21 2223

31、 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ù)和初始的編號,當(dāng)用冒泡法 排序的時候, 其固定的編號也隨之移動, 再用二分查找法查找 50的時候, 將下標 為mid的數(shù)輸出即為依次比較過的數(shù),如果找到 50則將其編號輸出即為其排序前 所在的位置, 如果沒找到則輸出提示信息。 這道題的主要問題在于, 如果產(chǎn)生了 若干個 50,如何都能打印出來, 采用的方法是將二分查找出的第一個 50的當(dāng)前下 標,再前后搜索還有沒有 50了,有就輸出對應(yīng)的原始下標。第 2、3 題:我采用的是以 1991年 1 月 1 日為基礎(chǔ),查詢出該天是星期幾,再根 據(jù)每一年中 12 個月分的天數(shù),要注意 2 月分平年和閏年的相差一天的區(qū)別,計 算出輸入的年月的第一天是距1

溫馨提示

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

最新文檔

評論

0/150

提交評論