收藏 分销(赏)

Java实验报告.doc

上传人:快乐****生活 文档编号:1970329 上传时间:2024-05-13 格式:DOC 页数:15 大小:122KB
下载 相关 举报
Java实验报告.doc_第1页
第1页 / 共15页
Java实验报告.doc_第2页
第2页 / 共15页
Java实验报告.doc_第3页
第3页 / 共15页
Java实验报告.doc_第4页
第4页 / 共15页
Java实验报告.doc_第5页
第5页 / 共15页
点击查看更多>>
资源描述

1、Java语言程序设计实验报告实验序号:3实验项目名称: 熟练java语法、常用方法、程序结构学号10090401xx姓名xx专业、班电子商务1002实验地点xx指导教师xx时间2012.4.26一、实验目的及要求1、 进一步熟练Java语法和常用方法的使用;2、 进一步熟练Java程序结构;3、 进一步提高算法设计与实现的能力;4、 为后续章节的学习打下坚实的基础;二、实验设备(环境)实验室计算机、windows xp系统、myeclipse三、 实验内容与步骤1.随机生成100个0到200的整数,用折半查找法(二分法)查找50是第几个数, 并输出查找过程(即和什么数进行了比较)。(折半查找是

2、在已经排序的数据中做的查找,所以先要排序)2.显示任意一个月份的日历(1900)(一周一行,要有月名、表头和横线。 按列右对齐, 用String.format(%1$ 4d,intNumber)可以将任意整数intNumber格式化成前面补“空格”的4位定长字符串)3.显示出任一年份的日历(1900)4.用数组模拟实现一个50个字符串的堆栈,并使这个堆栈有如下方法和参数:myStack:数组名,使用时不能直接对这个数组进行存取操作,存取操作都通过pop()和push()完成。实现pop(): 弹出实现push():压入实现isFull():是否已满实现isEmpty():是否为空实现lengt

3、h():已有多少元素要点:要将代码设计成有通用性,也就是说要考虑各种可能的情况,考虑越多,你的程序就越稳定可靠,高可靠性的代码一直是一个开发人员追求的最高目标之一。5.使用堆栈,将中缀算术表达式转换成后缀表达式。a) 表达式中只有、,/,(,)六种运算符b) 变量名为以英文字母开头的字母数字串c) 表达式中可以出现不带符号的常数d) 适当判断表达式中的语法错误e) 不计算结果f) 参考:(算法描述)1. 若遇到的是数字或小数点,则直接写入到strResult中 (strResult为结果字符串);2. 若遇到的是左括号,则应把它压入到运算符栈中;3. 若遇到的是右括号,把从栈顶直到保存着的对应

4、左括号之间的运算符依次退栈并写入strResult串中;4. 若遇到的是运算符: 4.1 当该运算符的优先级大于栈顶运算符的优先级时,进栈 4.2 若遇到的运算符的优先级小于或等于栈顶运算符的优先级,这表明栈顶运算符的两个运算对象已经被保存到strResult串中,应将栈顶运算符退栈并写入到strResult串中,对于新的栈顶运算符仍继续进行比较和处理,直到被处理的运算符的优先级大于栈顶运算符的优先级为止,然后让该运算符进栈即可。四、实验结果与数据处理程序代码:import java.io.BufferedReader;import java.io.IOException;import jav

5、a.io.InputStreamReader;public class experiment_3static int intInputValue;static String strInputValue;static int length;public static void main(String args)random();/第1题随机数排序查找的功能calendar();/第二题日历的功能String myString=new String;System.out.print(请输入合法的中缀表达式:);if(getStringInput(myString)MidfixToSuffix(my

6、String0);static void random() int anArray;anArray=new int1002;/二维数组,存取随机数和其固定编号for(int i=0;i100;i+)anArrayi0=(int)(Math.random()*200)+1;/产生100个在1-200之间的随机数anArrayi1=i+1;System.out.println(随机产生的数为:);for(int i=0;i100;i+)/打印排序前的随机数System.out.print(String.format(%1$ 5d,anArrayi0);if(i+1)%20=0)System.out

7、.println();BobbleSort(anArray);/调用排序函数对随机数进行排序System.out.println(排序后的数为:);for(int i=0;i100;i+)System.out.print(String.format(%1$ 5d,anArrayi0);if(i+1)%20=0)System.out.println();int num=BinarySearch(anArray,50,anArray.length);/返回查找到的数的下标,没有则为-1System.out.println();if(num0;i-)if(anArrayi0=50)System.ou

8、t.print(anArrayi1+ );/输出该数为第几个数for(int i=m+1;i100;i+)if(anArrayi0=50)System.out.print(anArrayi1+ );/输出该数为第几个数System.out.println(个数);/输出该数为第几个数static int BinarySearch(int arr,int searchkey,int n)/二分查找算法int low=0;int high=n-1;System.out.print(和50比较过的数依次为:);while(lowarrmid0)low=mid+1;elsehigh=mid-1;ret

9、urn -1;static void BobbleSort(int arr)/冒泡法排序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-;static void calendar() int year1=0;int month1=0;if(g

10、etIntegerInput(请输入要查询日历的年月+r+年份)year1=intInputValue;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);/调用同一个函数,进2012年的12个月的日历输出static void Output(int year,int mon

11、th)/输出函数int totalDays=0;for(int 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);/在1991.1.1的基础上算当前日期是第几天System.out.println( +year+年+month+月);/打印表头和横线System.out.println(-);System.out.println( 日 一 二 三 四 五 六);int week=Week(totalDays);/表示当前月的第一天的星期int

12、day=Day(year,month);/当前月的天数for(int i=0;iweek%7;i+)System.out.print( );/打印1号前的空格for(int i=1;i=day;i+)System.out.print(String.format(%1$ 4d,i);if(i+week)%7=0) /依次打印出一个月的日期System.out.println();System.out.println(r);static int Week(int days)/计算某一天的星期int week=1,2,3,4,5,6,7;/int day_1991_1_1=week1;/经查找,19

13、01年1月1日是星期二int theweek=week(days+1)%7;return theweek;static int Day(int year,int month)/用来确定任意一年任意一月的天数int numDays=0;switch(month)case 1:case 3:case 5:case 7:case 8: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)|(yea

14、r%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 false;static int Length(char stack)/返回栈中元素个数return length;static char getTop(char stack) /返

15、回栈顶元素if (isEmpty(stack)return 0;elsereturn stackLength(stack) - 1;static void pop(char stack) /出栈if (isEmpty(stack)return ;length-;return ;static boolean push(char stack, char aChar)/入栈if (isFull(stack)return false;stacklength+ = aChar;return true;static void MidfixToSuffix(String s)char myStack=new

16、 char50; System.out.println(其后缀表达式为:);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) = ) /如果是运算符则进一步判断System.out.print( );while (true) if (s.charAt(i) = () /是左括号则直接进栈push(myStack,s.charAt(i);br

17、eak; else if (s.charAt(i) = ) /是右括号则栈中左括号上面的所有符号依次出栈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) = / | s.charAt(i) = %)& (getTop

18、(myStack) = + | getTop(myStack) = -) /根据运算符的优先级判断,如果是高优先级进栈push(myStack, s.charAt(i);break; else System.out.print(getTop(myStack);pop(myStack); else/运算变量直接输出System.out.print(s.charAt(i);while (!isEmpty(myStack) /将栈中剩余的运算符直接输出System.out.print(getTop(myStack);pop(myStack);static boolean getIntegerInpu

19、t(String aPrompt) /返回值输入值/若返回false,则输入出错,输入的值不能用。若返回true,输入正确,输入值可以用int anInteger=0;String strInput=null;trySystem.out.print(aPrompt+: );BufferedReader br=new BufferedReader(new InputStreamReader(System.in);strInput=br.readLine();anInteger=Integer.parseInt(strInput);catch(IOException e)System.out.pr

20、intln(IO错误!请重新运行程序。);return false;catch(NumberFormatException e)System.out.println(你的输入可能有格式错误!请重新运行程序。);return false;intInputValue=anInteger;return true;static boolean getStringInput(String str) / String strInput=null;boolean isInputMistake = false;try /System.out.print(请输入一个字符串: );BufferedReader b

21、r = new BufferedReader(new InputStreamReader(System.in);str0 = br.readLine(); catch (IOException e) isInputMistake = true;/ System.out.println(IO错误!请重新运行程序。);return !isInputMistake;程序运行的结果: (复制到word中排版变混乱了)随机产生的数为: 154 192 52 184 47 7 73 109 42 133 164 48 177 89 120 76 115 64 120 130 143 41 178 127

22、8 43 101 59 81 34 149 185 104 1 26 85 89 43 168 146 12 121 68 143 182 55 10 191 121 155 57 14 179 54 106 158 140 99 197 15 16 54 159 25 127 93 117 103 47 36 59 8 10 44 164 104 140 157 192 18 25 156 76 50 23 195 124 83 150 160 37 51 193 89 87 190 70 124 151 176排序后的数为: 1 7 8 8 10 10 12 14 15 16 18 23

23、25 25 26 34 36 37 41 42 43 43 44 47 47 48 50 51 52 54 54 55 57 59 59 64 68 70 73 76 76 81 83 85 87 89 89 89 93 99 101 103 104 104 106 109 115 117 120 120 121 121 124 124 127 127 130 133 140 140 143 143 146 149 150 151 154 155 156 157 158 159 160 164 164 168 176 177 178 179 182 184 185 190 191 192 19

24、2 193 195 197和50比较过的数依次为: 99 47 68 54 51 48 5050是排序前的第85个数请输入要查询日历的年月年份: 2012月份: 4 2012年4月- 日 一 二 三 四 五 六 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请输入要查询的全年日历的年份: 2012 2012年1月- 日 一 二 三 四 五 六 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 2

25、7 28 29 30 31 2012年2月- 日 一 二 三 四 五 六 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 2012年3月- 日 一 二 三 四 五 六 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年4月- 日 一 二 三 四 五 六 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 2

26、2 23 24 25 26 27 28 29 30 2012年5月- 日 一 二 三 四 五 六 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年6月- 日 一 二 三 四 五 六 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 2012年7月- 日 一 二 三 四 五 六 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 1

27、7 18 19 20 21 22 23 24 25 26 27 28 29 30 31 2012年8月- 日 一 二 三 四 五 六 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年9月- 日 一 二 三 四 五 六 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 2012年10月- 日 一 二 三 四 五 六 1 2 3 4 5 6 7 8 9 10

28、11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 2012年11月- 日 一 二 三 四 五 六 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 2012年12月- 日 一 二 三 四 五 六 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请输入合法的中缀表达式:9+(8*5-6)%6-8

29、/3其后缀表达式为:9 8 5 *6 - 6 %+8 3/-数据处理:第1题:定义一个二维数组,用来存储产生的随机数和初始的编号,当用冒泡法排序的时候,其固定的编号也随之移动,再用二分查找法查找50的时候,将下标为mid的数输出即为依次比较过的数,如果找到50则将其编号输出即为其排序前所在的位置,如果没找到则输出提示信息。这道题的主要问题在于,如果产生了若干个50,如何都能打印出来,采用的方法是将二分查找出的第一个50的当前下标,再前后搜索还有没有50了,有就输出对应的原始下标。第2、3题:我采用的是以1991年1月1日为基础,查询出该天是星期几,再根据每一年中12个月分的天数,要注意2月分平

30、年和闰年的相差一天的区别,计算出输入的年月的第一天是距1991.1.1多少天,总天数mod7就可以得出第一天是周几,输出日历和时候就可以从计算出的星期几开始,依次打印出该月的所有天,第七个一行,第3题也就是将第2题的程序按照1-12月循环执行12次就可以得出最终的结果了。第4、5题:这道题的关键是定义一个栈和一个数组,其中栈用来存放运算符,数组用来存放后缀表达式,从左到右扫描中缀表达式,是操作数就放进数组的末尾,如果是运算符的话,分为下面3种情况:1.如果是(直接入栈。2.如果是),依次从栈中弹出运算符加到数组的末尾,直到遇到(为止;3. 如果是非括号,比较扫描到的运算符,和栈顶的运算符。如果

31、扫描到的运算符优先级高于栈顶运算符,则把运算符压入栈。否则的话,就依次把栈中运算符弹出加到数组的末尾,直到遇到优先级低于扫描到的运算符或栈空,并且把扫描到的运算符压入栈中。就这样依次扫描,直到结束为止。如果扫描结束,栈中还有元素,则依次弹出加到数组的末尾,就得到了后缀表达式。五、 分析与讨论(体会、感想、意见、建议)通过本次实验,对较大的程序的全局掌控有了一定的锻炼,进一步提升了在编程中分析问题,解决问题的能力。最大的感受就是要有耐心,面对一行行的代码,我们很容易浮躁,尤其是当没有思路难以下手的时候,非常而要一些恒心和毅力。这次实验,感觉在对一些数组的定义,使用方面还有更加待熟练,以前学的数据

32、结构的知识,比如栈的使用有些遗忘了。这些还是多通过实验才能更好地掌握。编写了这几道题的代码,对养成变量命名以及代码的良好风格也有一定的帮助。总之在这次实验中收获颇多,也体会到了编程中细心、耐心、恒心的重要性,希望有今后的实验中有更多的进步。教师评语及成绩:签名:日期:说明:1、 同学们可以直接在这个格式文件中填写你们的实验过程及结果;2、 实验报告文件要统一命名格式:“电商0802_JavaExp1_姓名”,“计科0901_JavaExp1_姓名”,“电商0902_JavaExp1_姓名”,请注意,中间的分隔符是英文下划线。3、 如果不按此格式命名,将拒收实验报告,改正后再上交;4、 坚决杜绝

33、抄袭,如果发现有抄袭者,实验报告为0分;(本课程最后成绩,实验占40%, 期末考试占605、 按时完成报告,班干部收集,然后集中上交老师。请注意,一定不要直接交给老师,这样容易丢失。7、“分析与讨论”部分通常会占10%至20%的分数。其中专业理论知识内容包括:保安理论知识、消防业务知识、职业道德、法律常识、保安礼仪、救护知识。作技能训练内容包括:岗位操作指引、勤务技能、消防技能、军事技能。二培训的及要求培训目的安全生产目标责任书为了进一步落实安全生产责任制,做到“责、权、利”相结合,根据我公司2015年度安全生产目标的内容,现与财务部签订如下安全生产目标:一、目标值:1、全年人身死亡事故为零,

34、重伤事故为零,轻伤人数为零。2、现金安全保管,不发生盗窃事故。3、每月足额提取安全生产费用,保障安全生产投入资金的到位。4、安全培训合格率为100%。二、本单位安全工作上必须做到以下内容: 1、对本单位的安全生产负直接领导责任,必须模范遵守公司的各项安全管理制度,不发布与公司安全管理制度相抵触的指令,严格履行本人的安全职责,确保安全责任制在本单位全面落实,并全力支持安全工作。 2、保证公司各项安全管理制度和管理办法在本单位内全面实施,并自觉接受公司安全部门的监督和管理。 3、在确保安全的前提下组织生产,始终把安全工作放在首位,当“安全与交货期、质量”发生矛盾时,坚持安全第一的原则。 4、参加生产碰头会时,首先汇报本单位的安全生产情况和安全

展开阅读全文
相似文档                                   自信AI助手自信AI助手
猜你喜欢                                   自信AI导航自信AI导航
搜索标签

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2024 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服