Java实验报告(同名17600).doc_第1页
Java实验报告(同名17600).doc_第2页
Java实验报告(同名17600).doc_第3页
Java实验报告(同名17600).doc_第4页
Java实验报告(同名17600).doc_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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.显示任意一个月份的日历(1900)(一周一行,要有月名、表头和横线。 按列右对齐, 用String.format(%1$ 4d,intNumber)可以将任意整数intNumber格式化成前面补“空格”的4位定长字符串)3.显示出任一年份的日历(1900)4.用数组模拟实现一个50个字符串的堆栈,并使这个堆栈有如下方法和参数:myStack:数组名,使用时不能直接对这个数组进行存取操作,存取操作都通过pop()和push()完成。实现pop(): 弹出实现push():压入实现isFull():是否已满实现isEmpty():是否为空实现length():已有多少元素要点:要将代码设计成有通用性,也就是说要考虑各种可能的情况,考虑越多,你的程序就越稳定可靠,高可靠性的代码一直是一个开发人员追求的最高目标之一。5.使用堆栈,将中缀算术表达式转换成后缀表达式。a) 表达式中只有、,/,(,)六种运算符b) 变量名为以英文字母开头的字母数字串c) 表达式中可以出现不带符号的常数d) 适当判断表达式中的语法错误e) 不计算结果f) 参考:(算法描述)1. 若遇到的是数字或小数点,则直接写入到strResult中 (strResult为结果字符串);2. 若遇到的是左括号,则应把它压入到运算符栈中;3. 若遇到的是右括号,把从栈顶直到保存着的对应左括号之间的运算符依次退栈并写入strResult串中;4. 若遇到的是运算符: 4.1 当该运算符的优先级大于栈顶运算符的优先级时,进栈 4.2 若遇到的运算符的优先级小于或等于栈顶运算符的优先级,这表明栈顶运算符的两个运算对象已经被保存到strResult串中,应将栈顶运算符退栈并写入到strResult串中,对于新的栈顶运算符仍继续进行比较和处理,直到被处理的运算符的优先级大于栈顶运算符的优先级为止,然后让该运算符进栈即可。四、实验结果与数据处理程序代码:import java.io.BufferedReader;import java.io.IOException;import java.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(myString0);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.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.out.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;return -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(getIntegerInput(请输入要查询日历的年月+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 month)/输出函数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 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;/经查找,1901年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)|(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 false;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 ;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) = - | 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) = ) /是右括号则栈中左括号上面的所有符号依次出栈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(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 getIntegerInput(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.println(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 br = 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 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 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 192 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 27 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 22 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 17 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 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/3其后缀表达式为:9 8 5 *6 - 6 %+8 3/-数据处理:第1题:定义一个二维数组,用来存储产生的随机数和初始的编号,当用冒泡法排序的时候,其固定的编号也随之移动,再用二分查找法查找50的时候,将下标为mid的数输出即为依次比较过的数,如果找到50则将其编号输出即为其排序前所在的位置,如果没找到则输出提示信息。这道题的主要问题在于,如果产生了若干个50,如何都能打印出来,采用的方法是将二分查找出的第一个50的当前下标,再前后搜索还有没有50了,有就输出对应的原始下标。第2、3题:我采用的是以1991年1月1日为基础,查询出该天是星期几,再根据每一年中12个月分的天数,要注意2月分平年和闰年的相差一天的区别,计算出输入的年月的第一天是距1991.1.1多少天,总天数mod7

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论