Java实验报告.docx
- 文档编号:10634519
- 上传时间:2023-02-22
- 格式:DOCX
- 页数:22
- 大小:22.83KB
Java实验报告.docx
《Java实验报告.docx》由会员分享,可在线阅读,更多相关《Java实验报告.docx(22页珍藏版)》请在冰豆网上搜索。
Java实验报告
《Java语言程序设计》实验报告
实验序号:
3
实验项目名称:
熟练java语法、常用方法、程序结构
学 号
10090401xx
姓 名
xx
专业、班
电子商务1002
实验地点
xx
指导教师
xx
时间
2012.4.26
一、实验目的及要求
1、进一步熟练Java语法和常用方法的使用;
2、进一步熟练Java程序结构;
3、进一步提高算法设计与实现的能力;
4、为后续章节的学习打下坚实的基础;
二、实验设备(环境)
实验室计算机、windowsxp系统、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串中,对于新的栈顶运算符仍继续进行比较和处理,直到被处理的运算符的优先级大于栈顶运算符的优先级为止,然后让该运算符进栈即可。
四、实验结果与数据处理
程序代码:
importjava.io.BufferedReader;
importjava.io.IOException;
importjava.io.InputStreamReader;
publicclassexperiment_3{
staticintintInputValue;
staticStringstrInputValue;
staticintlength;
publicstaticvoidmain(Stringargs[])
{
random();//第1题随机数排序查找的功能
calendar();//第二题日历的功能
String[]myString=newString[]{""};
System.out.print("请输入合法的中缀表达式:
");
if(getStringInput(myString))
MidfixToSuffix(myString[0]);
}
staticvoidrandom()
{
int[][]anArray;
anArray=newint[100][2];//二维数组,存取随机数和其固定编号
for(inti=0;i<100;i++)
{
anArray[i][0]=(int)(Math.random()*200)+1;//产生100个在1-200之间的随机数
anArray[i][1]=i+1;
}
System.out.println("随机产生的数为:
");
for(inti=0;i<100;i++)//打印排序前的随机数
{
System.out.print(String.format("%1$5d",anArray[i][0]));
if((i+1)%20==0)
System.out.println();
}
BobbleSort(anArray);//调用排序函数对随机数进行排序
System.out.println("排序后的数为:
");
for(inti=0;i<100;i++)
{
System.out.print(String.format("%1$5d",anArray[i][0]));
if((i+1)%20==0)
System.out.println();
}
intnum=BinarySearch(anArray,50,anArray.length);//返回查找到的数的下标,没有则为-1
System.out.println();
if(num<0)
System.out.println("NOFOUND!
");//输出查找失败信息
else
{
System.out.print("50是排序前的第");//输出该数为第几个数
intm=num;
for(inti=num;i>0;i--)
{
if(anArray[i][0]==50)
System.out.print(anArray[i][1]+"");//输出该数为第几个数
}
for(inti=m+1;i<100;i++)
{
if(anArray[i][0]==50)
System.out.print(anArray[i][1]+"");//输出该数为第几个数
}
System.out.println("个数");//输出该数为第几个数
}
}
staticintBinarySearch(int[][]arr,intsearchkey,intn)//二分查找算法
{
intlow=0;
inthigh=n-1;
System.out.print("和50比较过的数依次为:
");
while(low<=high)
{
intmid=(low+high)/2;
System.out.print(""+arr[mid][0]);//每一次都是下标为mid的数和50比较
if(searchkey==arr[mid][0])
returnmid;//如果找到,返回其编号
else
if(searchkey>arr[mid][0])
low=mid+1;
else
high=mid-1;
}
return-1;
}
staticvoidBobbleSort(int[][]arr)//冒泡法排序
{
inti,j,change;
change=1;
j=arr.length-1;
while(j>0&&change==1)
{
change=0;
for(i=0;i if(arr[i][0]>arr[i+1][0])//将随机数和其编号同时交换 { inttemp1=arr[i][0]; inttemp2=arr[i][1]; arr[i][0]=arr[i+1][0]; arr[i][1]=arr[i+1][1]; arr[i+1][0]=temp1; arr[i+1][1]=temp2; change=1; } j--; } } staticvoidcalendar() { intyear1=0; intmonth1=0; if(getIntegerInput("请输入要查询日历的年月"+"\r"+"年份")) year1=intInputValue; if(getIntegerInput("月份")) month1=intInputValue; Output(year1,month1);//对特定的year1和month1的日历输出 intyear2=0; if(getIntegerInput("请输入要查询的全年日历的年份")) year2=intInputValue; for(inti=1;i<=12;i++) Output(year2,i);//调用同一个函数,进2012年的12个月的日历输出 } staticvoidOutput(intyear,intmonth)//输出函数 { inttotalDays=0; for(inty=1901;y for(intm=1;m<=12;m++) totalDays+=Day(y,m); for(intm=1;m totalDays+=Day(year,m);//在1991.1.1的基础上算当前日期是第几天 System.out.println(""+year+"年"+month+"月");//打印表头和横线 System.out.println("----------------------------"); System.out.println("日一二三四五六"); intweek=Week(totalDays);//表示当前月的第一天的星期 intday=Day(year,month);//当前月的天数 for(inti=0;i System.out.print("");//打印1号前的空格 for(inti=1;i<=day;i++) { System.out.print(String.format("%1$4d",i)); if((i+week)%7==0)//依次打印出一个月的日期 System.out.println(); } System.out.println("\r"); } staticintWeek(intdays)//计算某一天的星期 { intweek[]={1,2,3,4,5,6,7}; //intday_1991_1_1=week[1];//经查找,1901年1月1日是星期二 inttheweek=week[(days+1)%7]; returntheweek; } staticintDay(intyear,intmonth)//用来确定任意一年任意一月的天数 { intnumDays=0; switch(month) { case1: case3: case5: case7: case8: case10: case12: numDays=31;//大月的情况 break; case4: case6: case9: case11: numDays=30;//小月的情况 break; case2: //闰年的情况 if(((year%4==0)&&! (year%100==0))||(year%400==0)) numDays=29; else numDays=28; break; } returnnumDays; } 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)) return'\0'; else returnstack[Length(stack)-1]; } staticvoidpop(char[]stack)//出栈 { if(isEmpty(stack)) return; length--; return; } staticbooleanpush(char[]stack,charaChar)//入栈 { if(isFull(stack)) returnfalse; stack[length++]=aChar; returntrue; } staticvoidMidfixToSuffix(Strings) { char[]myStack=newchar[50]; System.out.println("其后缀表达式为: "); for(inti=0;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; } elseif(s.charAt(i)==')')//是右括号则栈中左括号上面的所有符号依次出栈 { while(getTop(myStack)! ='(') { System.out.print(getTop(myStack)+""); pop(myStack); } pop(myStack); break; } elseif(isEmpty(myStack)||getTop(myStack)=='(') { push(myStack,s.charAt(i)); break; } elseif((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); } } staticbooleangetIntegerInput(StringaPrompt)//返回值输入值 {//若返回false,则输入出错,输入的值不能用。 若返回true,输入正确,输入值可以用 intanInteger=0; StringstrInput=null; try { System.out.print(aPrompt+": "); BufferedReaderbr=newBufferedReader(newInputStreamReader(System.in)); strInput=br.readLine(); anInteger=Integer.parseInt(strInput); } catch(IOExceptione) { System.out.println("IO错误! 请重新运行程序。 "); returnfalse; } catch(NumberFormatExceptione) { System.out.println("你的输入可能有格式错误! 请重新运行程序。 "); returnfalse; } intInputValue=anInteger; returntrue; } staticbooleangetStringInput(String[]str) { //StringstrInput=null; booleanisInputMistake=false; try{ //System.out.print("请输入一个字符串: "); BufferedReaderbr=newBufferedReader(newInputStreamReader( System.in)); str[0]=br.readLine(); }catch(IOExceptione){ isInputMistake=true; //System.out.println("IO错误! 请重新运行程序。 "); } return! isInputMistake; } } 程序运行的结果: (复制到word中排版变混乱了) 随机产生的数为: 15419252184477731094213316448177891207611564120130 14341178127843101598134149185104126858943168146 121216814318255101911211555714179541061581409919715 165415925127931171034736598104416410414015719218 25156765023195124831501603751193898719070124151176 排序后的数为: 178810101214151618232525263436374142 4343444747485051525454555759596468707376 76818385878989899399101103104104106109115117120120 121121124124127127130133140140143143146149150151154155156157 158159160164164168176177178179182184185190191192192193195197 和50比较过的数依次为: 99476854514850 50是排序前的第85个数 请输入要查询日历的年月 年份: 2012 月份: 4 2012年4月 ---------------------------- 日一二三四五六 1234567 891011121314 15161718192021 22232425262728 2930 请输入要查询的全年日历的年份: 2012 2012年1月 ---------------------------- 日一二三四五六 1234567 891011121314 15161718192021 22232425262728 293031 2012年2月 ---------------------------- 日一二三四五六 1234 567891011 12131415161718 19202122232425 26272829 2012年3月 ---------------------------- 日一二三四五六 123 45678910 11121314151617 18192021222324 25262728293031 2012年4月 ---------------------------- 日一二三四五六 1234567 8910
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java 实验 报告