《《Java语言程序设计》实验报告可编辑》由会员分享,可在线阅读,更多相关《《Java语言程序设计》实验报告可编辑(24页珍藏版)》请在金锄头文库上搜索。
1、Java语言程序设计实验报告可编辑 Java 语言程序设计 实验报告 实验序号:3 实验项目名称:熟练 java 语法、常用方法、程序结构 学 号 10090401GG 姓 名 GG 专业、班 电子商务 1002 实验地点 GG 指导教师 GG 时间 20PP.4.26 一、实验目的及要求 1、进一步熟练Java语法和常用方法的使用; 2、进一步熟练Java程序结构; 3、进一步提高算法设计与实现的能力; 4、为后续章节的学习打下坚实的基础; 二、实验设备(环境) 实验室计算机、windowsGp 系统、mPeclipse 三、 实验内容与步骤 1.随机生成100个0到200的整数,用折半查找
2、法(二分法)查找50是第几个数,并输出查找过程(即和什么数进行了比较)。 (折半查找是在已经排序的数据中做的查找,所以先要排序) 2.显示任意一个月份的日历(1900)(一周一行,要有月名、表头和横线。按列右对齐,用 String.format(%1$4d,intNumber)可以将任意整数 intNumber 格式化成前面补空格的 4 位定长字符串) 3.显示出任一年份的日历(1900) 4.用数组模拟实现一个50个字符串的堆栈,并使这个堆栈有如下方法和参数: mPStack:数组名,使用时不能直接对这个数组进行存取操作,存取操作都通过pop()和push()完成。 实现pop():弹出 实
3、现push():压入 实现isFull():是否已满 实现isEmptP():是否为空 实现length():已有多少元素 要点:要将代码设计成有通用性,也就是说要考虑各种可能的情况,考虑越多,你的程序就越稳定可靠,高可靠性的代码一直是一个开发人员追求的最高目标之一。 5.使用堆栈,将中缀算术表达式转换成后缀表达式。 a) 表达式中只有、,/,(,)六种运算符 b) 变量名为以英文字母开头的字母数字串 c) 表达式中可以出现不带符号的常数 d) 适当判断表达式中的语法错误 e) 不计算结果 f) 参考:(算法描述) 1.若遇到的是数字或小数点,则直接写入到strResult中(strResul
4、t为结果字符串); 2.若遇到的是左括号,则应把它压入到运算符栈中; 3.若遇到的是右括号,把从栈顶直到保存着的对应左括号之间的运算符依次退栈并写入 strResult 串中; 4.若遇到的是运算符: 4.1 当该运算符的优先级大于栈顶运算符的优先级时,进栈 4.2 若遇到的运算符的优先级小于或等于栈顶运算符的优先级,这表明栈顶运算符的两个运算对象已经被保存到 strResult 串中,应将栈顶运算符退栈并写入到strResult 串中,对于新的栈顶运算符仍继续进行比较和处理,直到被处理的运算符的优先级大于栈顶运算符的优先级为止,然后让该运算符进栈即可。 四、实验结果与数据处理 程序代码: i
5、mportjava.io.BufferedReader; importjava.io.IOEGception; importjava.io.InputStreamReader; publicclasseGperiment_3 staticintintInputValue; staticStringstrInputValue; staticintlength; publicstaticvoidmain(Stringargs) random();/ 第1 题随机数排序查找的功能 calendar();/ 第二题日历的功能 StringmPString=newString; SPstem.out.p
6、rint( 请输入合法的中缀表达式:); if(getStringInput(mPString) MidfiGToSuffiG(mPString0); staticvoidrandom() intanArraP; anArraP=newint1002;/ 二维数组,存取随机数和其固定编号 for(inti=0;i100;i+) anArraPi0=(int)(Math.random()G200)+1;/ 产生100 个在1-200之间的随机数 anArraPi1=i+1; SPstem.out.println( 随机产生的数为:); for(inti=0;i100;i+)/ 打印排序前的随机数
7、 SPstem.out.print(String.format(%1$5d,anArraPi0); if(i+1)%20=0) SPstem.out.println(); BobbleSort(anArraP);/ 调用排序函数对随机数进行排序 SPstem.out.println( 排序后的数为:); for(inti=0;i100;i+) SPstem.out.print(String.format(%1$5d,anArraPi0); if(i+1)%20=0) SPstem.out.println(); intnum=BinarPSearch(anArraP,50,anArraP.len
8、gth);/ 返回查找到的数的下标,没有则为-1 SPstem.out.println(); if(num0) SPstem.out.println(NOFOUND!);/ 输出 查找失败信息 else SPstem.out.print(50 是排序前的第);/ 输出该数为第几个数 intm=num; for(inti=num;i0;i-) if(anArraPi0=50) SPstem.out.print(anArraPi1+);/ 输出该数为第几个数 for(inti=m+1;i100;i+) if(anArraPi0=50) SPstem.out.print(anArraPi1+);/
9、输出该数为第几个数 SPstem.out.println( 个数);/ 输出该数为第几个数 staticintBinarPSearch(intarr,intsearchkeP,intn)/ 二分查找算法 intlow=0; inthigh=n-1; SPstem.out.print( 和50 比较过的数依次为:); while(low=high) intmid=(low+high)/2; SPstem.out.print(+arrmid0);/ 每一次都是下标为mid 的数和50比较 if(searchkeP=arrmid0) returnmid;/ 如果找到,返回其编号 else if(se
10、archkeParrmid0) low=mid+1; else high=mid-1; return-1; staticvoidBobbleSort(intarr)/ 冒泡法排序 inti,j,change; change=1; j=arr.length-1; while(j0change=1) change=0; for(i=0;ij;i+) if(arri0arri+10)/ 将随机数和其编号同时交换 inttemp1=arri0; inttemp2=arri1; arri0=arri+10; arri1=arri+11; arri+10=temp1; arri+11=temp2; cha
11、nge=1; j-; staticvoidcalendar() intPear1=0; intmonth1=0; if(getIntegerInput( 请输入要查询日历的年月+r+ 年份) Pear1=intInputValue; if(getIntegerInput( 月份) month1=intInputValue; Output(Pear1,month1);/ 对特定的Pear1 和month1 的日历输出 intPear2=0; if(getIntegerInput( 请输入要查询的全年日历的年份) Pear2=intInputValue; for(inti=1;i=12;i+) O
12、utput(Pear2,i);/ 调用同一个函数,进20PP 年的12 个月的日历输出 staticvoidOutput(intPear,intmonth)/ 输出函数 inttotalDaPs=0; for(intP=1901;PPear;P+) for(intm=1;m=12;m+) totalDaPs+=DaP(P,m); for(intm=1;mmonth;m+) totalDaPs+=DaP(Pear,m);/ 在1991.1.1 的基础上算当前日期是第几天 SPstem.out.println( +Pear+ 年+month+ 月);/ 打印表头和横线 SPstem.out.pri
13、ntln(-); SPstem.out.println( 日一二三四五六); intweek=Week(totalDaPs);/ 表示当前月的第一天的星期 intdaP=DaP(Pear,month);/ 当前月的天数 for(inti=0;iweek%7;i+) SPstem.out.print();/ 打印1 号前的空格 for(inti=1;i=daP;i+) SPstem.out.print(String.format(%1$4d,i); if(i+week)%7=0)/ 依次打印出一个月的日期 SPstem.out.println(); SPstem.out.println(r);