Java实验研究报告.docx

上传人:b****6 文档编号:16710120 上传时间:2023-07-16 格式:DOCX 页数:21 大小:22.77KB
下载 相关 举报
Java实验研究报告.docx_第1页
第1页 / 共21页
Java实验研究报告.docx_第2页
第2页 / 共21页
Java实验研究报告.docx_第3页
第3页 / 共21页
Java实验研究报告.docx_第4页
第4页 / 共21页
Java实验研究报告.docx_第5页
第5页 / 共21页
Java实验研究报告.docx_第6页
第6页 / 共21页
Java实验研究报告.docx_第7页
第7页 / 共21页
Java实验研究报告.docx_第8页
第8页 / 共21页
Java实验研究报告.docx_第9页
第9页 / 共21页
Java实验研究报告.docx_第10页
第10页 / 共21页
Java实验研究报告.docx_第11页
第11页 / 共21页
Java实验研究报告.docx_第12页
第12页 / 共21页
Java实验研究报告.docx_第13页
第13页 / 共21页
Java实验研究报告.docx_第14页
第14页 / 共21页
Java实验研究报告.docx_第15页
第15页 / 共21页
Java实验研究报告.docx_第16页
第16页 / 共21页
Java实验研究报告.docx_第17页
第17页 / 共21页
Java实验研究报告.docx_第18页
第18页 / 共21页
Java实验研究报告.docx_第19页
第19页 / 共21页
Java实验研究报告.docx_第20页
第20页 / 共21页
亲,该文档总共21页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

Java实验研究报告.docx

《Java实验研究报告.docx》由会员分享,可在线阅读,更多相关《Java实验研究报告.docx(21页珍藏版)》请在冰点文库上搜索。

Java实验研究报告.docx

Java实验研究报告

《Java语言程序设计》实验报告

实验序号:

3

实验项目名称:

熟练java语法、常用方法、程序结构

学  号

xx

姓  名

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串中,对于新的栈顶运算符仍继续进行比较和处理,直到被处理的运算符的优先级大于栈顶运算符的优先级为止,然后让该运算符进栈即可。

四、实验结果与数据处理

程序代码:

import;

import;

import;

publicclassexperiment_3{

staticintintInputValue;

staticStringstrInputValue;

staticintlength;

publicstaticvoidmain(Stringargs[])

{

random();//第1题随机数排序查找的功能

calendar();//第二题日历的功能

String[]myString=newString[]{""};

"请输入合法的中缀表达式:

");

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;

}

"随机产生的数为:

");

for(inti=0;i<100;i++)//打印排序前的随机数

{

"%1$5d",anArray[i][0]));

if((i+1)%20==0)

;

}

BobbleSort(anArray);//调用排序函数对随机数进行排序

"排序后的数为:

");

for(inti=0;i<100;i++)

{

"%1$5d",anArray[i][0]));

if((i+1)%20==0)

;

}

intnum=BinarySearch(anArray,50,anArray.length);//返回查找到的数的下标,没有则为-1

;

if(num<0)

"NOFOUND!

");//输出查找失败信息

else

{

"50是排序前的第");//输出该数为第几个数

intm=num;

for(inti=num;i>0;i--)

{

if(anArray[i][0]==50)

"");//输出该数为第几个数

}

for(inti=m+1;i<100;i++)

{

if(anArray[i][0]==50)

"");//输出该数为第几个数

}

"个数");//输出该数为第几个数

}

}

staticintBinarySearch(int[][]arr,intsearchkey,intn)//二分查找算法

{

intlow=0;

inthigh=n-1;

"和50比较过的数依次为:

");

while(low<=high)

{

intmid=(low+high)/2;

""+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);//在

""+year+"年"+month+"月");//打印表头和横线

"----------------------------");

"日一二三四五六");

intweek=Week(totalDays);//表示当前月的第一天的星期

intday=Day(year,month);//当前月的天数

for(inti=0;i

"");//打印1号前的空格

for(inti=1;i<=day;i++)

{

"%1$4d",i));

if((i+week)%7==0)//依次打印出一个月的日期

;

}

"\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];

"其后缀表达式为:

");

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)==')')

{//如果是运算符则进一步判断

"");

while(true){

if(s.charAt(i)=='(')//是左括号则直接进栈

{

push(myStack,s.charAt(i));

break;

}

elseif(s.charAt(i)==')')//是右括号则栈中左括号上面的所有符号依次出栈

{

while(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

{

;

pop(myStack);

}

}

}

else//运算变量直接输出

;

}

while(!

isEmpty(myStack))//将栈中剩余的运算符直接输出

{

;

pop(myStack);

}

}

staticbooleangetIntegerInput(StringaPrompt)//返回值输入值

{//若返回false,则输入出错,输入的值不能用。

若返回true,输入正确,输入值可以用

intanInteger=0;

StringstrInput=null;

try

{

":

");

BufferedReaderbr=newBufferedReader(newInputStreamReader(System.in));

strInput=br.readLine();

anInteger=Integer.parseInt(strInput);

}

catch(IOExceptione)

{

"IO错误!

请重新运行程序。

");

returnfalse;

}

catch(NumberFormatExceptione)

{

"你的输入可能有格式错误!

请重新运行程序。

");

returnfalse;

}

intInputValue=anInteger;

returntrue;

}

staticbooleangetStringInput(String[]str)

{

//StringstrInput=null;

booleanisInputMistake=false;

try{

//"请输入一个字符串:

");

BufferedReaderbr=newBufferedReader(newInputStreamReader(

System.in));

str[0]=br.readLine();

}catch(IOExceptione){

isInputMistake=true;

//"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

891011121314

15161718192021

22232425262728

2930

2012年5月

----------------------------

日一二三四五六

12345

6789101112

13141516171819

20212223242526

2728293031

2012年6月

----------------------------

日一二三四五六

12

3456789

10111213141516

17181920212223

24252627282930

2012年7月

----------------------------

日一二三四五六

1234567

891011121314

15161718192021

22232425262728

293031

2012年8月

----------------------------

日一二三四五六

1234

567891011

12131415161718

19202122232425

262728293031

2012年9月

----------------------------

日一二三四五六

1

2345678

9101112131415

16171819202122

23242526272829

30

2012年10月

-------------

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2