Java实验研究报告.docx
- 文档编号:4505384
- 上传时间:2022-12-01
- 格式:DOCX
- 页数:19
- 大小:65.24KB
Java实验研究报告.docx
《Java实验研究报告.docx》由会员分享,可在线阅读,更多相关《Java实验研究报告.docx(19页珍藏版)》请在冰豆网上搜索。
Java实验研究报告
《Java语言程序设计》实验报告
实验序号:
3
实验工程名称:
熟练java语法、常用方法、程序结构
学号
10090401xx
姓名
XX
专业、班
电子商务1002
实验地点
XX
指导教师
XX
时间
2012.4.26
一、实验目的及要求
1、进一步熟练Java语法和常用方法的使用;
2、进一步熟练Jam程序结构;
3、进一步提高算法设计与实现的能力;
4、为后续章节的学习打下坚实的基础;
二、实验设备(环境)
实验室计算机、windowsxp系统、myeclipse
三、实验内容与步骤
1.随机生成100个0到200的整数,用折半查找法(二分法)查找50是第儿个数,并输出查找过程(即和什么数进行了比较)。
(折半查找是在已经排序的数据中做的查找,所以先要排序)
2.显示任意一个月份的日历01900)(一周一行,要有月名、表头和横线。
按列右对齐,用String,format(Z/%1$4d",intNumber)可以将任意整数intNumber格式化成前面补“空格”的4位定长字符串)
3•显示岀任一年份的日历01900)
4.用数组模拟实现一个50个字符串的堆栈,并使这个堆栈有如下方法和参数:
myStack:
数组名,使用时不能直接对这个数组进行存取操作,存取操作都通过pop()和push()完成。
实现pop():
弹出
实现push():
压入
实现isFullO:
是否已满
实现isEmpty():
是否为空
实现lengthO:
已有多少元素
要点:
要将代码设计成有通用性,也就是说要考虑各种可能的情况,考虑越多,你的程序就越稳定可黑,高可黑性的代码一直是一个开发人员追求的最高目标之一。
5.使用堆栈,将中缀算术表达式转换成后缀表达式。
a)表达式中只有+、X,/,%,(,)六种运算符
b)变量名为以英文字母开头的字母数字串
c)表达式中可以出现不带符号的常数
d)适当判断表达式中的语法错误
e)不计算结果
f)参考:
(算法描述)
1.若遇到的是数字或小数点,则直接写入到strResult中(strResult为结果字符串):
2.若遇到的是左括号,则应把它压入到运算符栈中;
3.若遇到的是右括号,把从栈顶直到保存着的对应左括号之间的运算符依次退栈并写入strResult串中;
4.若遇到的是运算符:
4.1当该运算符的优先级大于栈顶运算符的优先级时,进栈4.2若遇到的运算符的优先级小于或等于栈顶运算符的优先级,这表明栈顶运算符的两个运算对象已经被保存到strResult串中,应将栈顶运算符退栈并写入到strResult串中,对于新的栈顶运算符仍继续进行比较和处理,直到被处理的运算符的优先级大于栈顶运算符的优先级为止,然后让该运算符进栈即可。
四、实验结果与数据处理
程序代码:
importjava・io・BufferedReader°
importjava・io・IOExaeption,,
importjava・io・InputstreamReader<>
publicclassexperiment^{
staticintintlnputValue®
staticStringstrInputValueo
staticintlength。
publicstaticvoidmain(Stringargs[])
{
randomO.//第1题随机数排序査找的功能
calendar()o//第二題日历的功能
String[]myString=newString[]{""}<>
System.out.print(H请输入合法的中缀表达式:
")o
if(getStringHnput(myS仁ring))
MidfixToSuffix(myString[0])。
}
staticvoidrandom()
{
int[][]anArray«>
anArray=newint[100][2]<»//二维数组,存取随机数和其固定编号
for(inti=0°KlOOoi++)
(
anArray[i][0]=(int)(Math・random()"200)+1。
//产生100个在1-200之间的随机数
anJLrray[i][1]=i+lo
}
System,out・printin(H随机产生的数为:
”)。
for(inti=0oi<100oi++)//打印排序前的随机数
{
System.out.print(String・format(H%1$5d"zanArray[i][0]))。
if((i+l)%20==0)
BobbleSort(anArray)o//调用排序函数对随机数进行排序System.out.printin(M排序后的数为:
”。
for(inti=0°iXlOO。
i++)
{
System・out・print(String・format(H%1$5d'f.anArray[i][0]))©if((i+l)%20==0)
System・out・println()。
}
intnum=BinarySearch(anArray,50,anArray・leng七h)。
//返回査找到的数的下标,没有则为
System・out・printin()o
if(num<0)
System・out.printin(nNOFOUND!
")。
//输出査找失败信息
else
{
System.out.print('•50是排序前的第")。
//输出该数为第几个数
intm=num€
for(inti=numoi>0oi——)
<
if(anArray[i][0]==50)
System,out.print(an2Lrray[i][1]+H")o//输出该数为第几个数
}
for(inti=m+l<>i<100oi++)
{
if(anArray[i][0]==50)
System,out.print(anArray[i][l]+nn)o//输出该数为第几个数
}
System.out.printin(n个数”)。
//输出该数为第几个数
}
}
staticintBinarySearch(int[][]arrfintsearchkeyfintn)//二分查找算法
{
intlow=0。
inthigh=n-l<>
System.out.print("和50比较过的数依次为:
n)o
while(low<=high)
(
intmid=(low+high)/2<»
System.out.print(""+arr[mid][0])0//每一次都是下标为mid的数和
50比较
if(searchkey==arr[mid][0])returnmid。
//如果找到,返回其编号else
if(searchkey>arr[mid][0])
low=mid+l<>
else
high=mid-l<,
}
return-16
}
staticvoidBobbleSort(int[][]arr)//冒泡法曲乍序
{
intizjzchange。
ahange=l0
j=arr・length-l。
while(j>0&&change==1)
{
change=0c
for(i=0ei if(arr[i][0]>arr[i+l][0])//将随机数和其编号同时交换 { inttempl=arr[i][0]o inttemp2=arr[i][1]« arr[i][0]=arr[i+l][0]<, arr[i][l]=arr[i+l][1]« arr[1+1][0]=templo arr[1+1][1]=temp2c change=l€ } } } staticvoidcalendar() { intyearl=0。 intmonthl=0。 if(getlntegerlnput(”请输入要査询日历的年月"+n\rn+'f年份”))yearl=intInputValue0 if(getlntegerlnput("月份”)) monthl=intInputValue<» Output(yearl,monthl)(>//对特定的yearlymonthl的日历输出intyeaz? 2=0。 if(getlntegerlnput(n请输入要査询的全年日历的年份")) year2=intInputValue<» for(inti=l<>i<=12°i++) Output(year2,i)<>//调用同一个函数,进2012年的12个月的日历输出 } staticvoidOutput(intyearzintmonth)//输出函数 { inttotalDays=0<> for(inty=1901oy for(intm=l€m<=120m++) totalDays+=Day(y,m)° for(intm=l<»m totalDays+=Day(yearzm)。 //在199: 1・1.1的基础上算当前日期是第几天 System・out・printin("年”+month+"月n)o//打印表头和横线 System・out・printin("")。 System,out.println(八日一’二三四五 六。 intweek=Week(totalDays)//表示当前月的第一天的星期 intday=Day(year,month)<>//当前月的天数 for(inti=0。 iXweek%7°i++) System.out.print("//打印3■号前的空格 for(inti=l。 i<=day<>i++) { System.out.print(String・format("%1$4dnri))o if((i+week)%7==0)//依次打印出一个月的日期 System・out・println()。 } System.out.println("\r”)<> } staticintWeek(intdays)//计算某一天的星期 < intweek[]={l,2z3,4z5z6z7}o //intday_1991_l_l=week[l],//经査找,1901年1月1日是星期二 inttheweek=week[(days+1)%7]o returntheweek® } staticintDay(intyearfintmonth)//用来确定任意一年任意一月的天数 { intnumDays=0。 switch(month) { case1: case3: case5: case7: case10: case12: numDays=31^//大月的情况 break<, case 4: case 6: case 9: case 11: numDays=30e//小月的情况 break® case2: //闰年的情况 if(((year%4==0)&&! (year*100==0))||(year%400==0)) niimDays=29<> else nxiinDays=28o break® } returnnumDayso } staticbooleanisEmpty(char[]stack)//判断栈是否为空< if(length==0) returntrue。 returnfalse<> } staticbooleanisFull(char[]stack)//判断栈是否为满 < if(length==50) returntrue© returnfalse® } staticintLength(char[]stack)//返回栈中元素个数 < returnlength© } staticchargetTop(char[]stack)//返回栈顶元素 if(isEmpty(stack)) staticvoidpop(char[]stack)//出栈 staticvoidMidfixToSuffix(Strings) push(myStack,s・charAt(i))«>break© •)•)//是右括号则栈中左抬号上面 elseif(s・charAt(i) 的所有符号依次出栈 } pop(myStack)<> breako elseif(isEmpty(myStack)||getTop(myStack)== push(myStack,s・charAt(i))°break® } elseif((s・charAt(i)==1*1||s・charAt(i)=='/ s・charAt(i)==f%*) &&(getTop(myS仁ack)==1+1||getTop(myStack) {//根据运算符的优先级判断,如果是高优先级进栈 push(myStack,s・charAt(i))o breako } else System・out・print(getTop(myStack))°pop(myStack)o } } } else//运算变量直接输出 System・out.print(s・charAt(i))。 } while(•isEmpty(myStack))//将栈中剩余的运算符逍接输出{ System・out・print(getTop(myStack))o pop(myStack)© } staticbooleangetlntegerlnput(StringaPrompt)//返回值输入值 {//若返回false,则输入出错,输入的值不能用。 若返回true,输入正确,输入值可以用 intanlnteger=O<> Stringstrlnput=null。 try System.out.print(aPrompt+H: ° BufferedReaderbr=newBufferedReader(new InputStreamReader(System・in))。 strlnput=br・readLine()。 anlnteger=lnteger.parselntL(strinput)。 catch(IOExceptione) { System.out.printin(HTO错误! 请重新运行程序。 。 returnfalse® } catch(NiunberFormatExceptione) { System.out.printin("你的输入可能有格式错课! 请重新运行程序。 ")。 returnfalse® } intInputValue=anInteger<> returntrue® } staticbooleangetStringlnput(String[]str) { //Stringstrlnput=null° booleanisInputMistake=: false。 try{ //System.out.print(H请输入一个字符串: ”)。 BufferedReaderbr=newBufferedReader(newInputstreamReader( System.in))。 str[0]=br・readLine()<» }catch(IOExceptione){ isInputMistake=true® //System.out.printin(nIO错误! 请重新运行程序。 } return! isInputMistake<> } } 程序运行的结果: (复制到word中排版变混乱了) 随机产生的数为: 154 192 52 184 47 773109 42 133 164 48 177 89 120 76 115 64 120130 143 41 178 127 8 4310159 81 34 149 185 104 1 26 85 89 43 168146 12 121 68143 182 5510 191 121 155 57 14 179 54106 158 14099 197 15 16 54159 25 127 93117 103 47 36 59 8 10 44164 104 140157 192 18 25 156 76 50 23195124 83 150 160 37 51 193 8987 190 70124 151 176 排序后的数为: 1 7 8 8 10 10 1214 15 16 18 2325 2526 34 36 37 41 42 43 43 44 47 47 48 5051 52 54 54 55 5759 59 64 68 70 73 76 76 81 83 85 87 89 8989 93 99 101 103 104104 106 109 115117120120 121 121 124 124 127 127 130133 140 140 143 143 146149 150 151 154155156157 158 159 160 164 164 168 176177 178 179 182 184 185190191192192193195197 和50比较过的数依次为: 9947685451485050是排序前的第85个数 请输入要查询日历的年月 年份: 2012 月份: 4 2012年4月 日 4 二 7 四 五 六 1 2 3 5 6 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 请输入要查询的全年日历的年份: 2012 2012年1月 EI 一 ■■■ 三 五 六 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 2012年2月 日一二三四 1 2 3 4 567 8 9 10 11 121314 15 16 17 18 192021 22 23 24 25 262728 29 2012年3月 4 EI 7 3 10 四 五 六 5 6 1 8 2 9 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 2012年4月 日 — 二 三 四 五 六 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 23 24 25 26 27 28 2930 2012年5月 EI 1 2 二 5 四 五 六 3 4 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 2012年6月 3 日 4 5 6 二 2 9 四 五 六 7 1 8 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 2012年7月 1 日 2 3 4 二 7 四 五 六 5 6 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 2012年8月 日 1 二 4 四 五 六 2 3 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 2
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java 实验 研究 报告
![提示](https://static.bdocx.com/images/bang_tan.gif)