计科1101JavaExp3左子娟.docx

上传人:b****9 文档编号:25626973 上传时间:2023-06-10 格式:DOCX 页数:43 大小:244.54KB
下载 相关 举报
计科1101JavaExp3左子娟.docx_第1页
第1页 / 共43页
计科1101JavaExp3左子娟.docx_第2页
第2页 / 共43页
计科1101JavaExp3左子娟.docx_第3页
第3页 / 共43页
计科1101JavaExp3左子娟.docx_第4页
第4页 / 共43页
计科1101JavaExp3左子娟.docx_第5页
第5页 / 共43页
点击查看更多>>
下载资源
资源描述

计科1101JavaExp3左子娟.docx

《计科1101JavaExp3左子娟.docx》由会员分享,可在线阅读,更多相关《计科1101JavaExp3左子娟.docx(43页珍藏版)》请在冰豆网上搜索。

计科1101JavaExp3左子娟.docx

计科1101JavaExp3左子娟

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

实验序号:

实验项目名称:

编程解题(1、2、3、4、5、6)

学  号

1109050119

姓  名

左子娟

专业、班

计科1101

实验地点

中四#612

指导教师

韩志农

时间

2013.4.20

1、实验目的及要求

1、进一步熟练Java语法和常用方法的使用;

2、进一步熟练Java程序结构;

3、进一步提高算法设计与实现的能力;

4、为后续章节的学习打下坚实的基础;

2、实验设备(环境)

1、硬件:

win7系统

2、软件:

MyEclipse8.5

3、实验内容与步骤

编程题目:

1、随机生成100个0到200的整数(包括0和200),用折半查找法(二分法)查找50是第几个数,并输出查找过程(即和什么数进行了比较)。

(输出排序之前的序号)

(折半查找是在已经排序的数据中做的查找,所以先要排序。

有可能找不到50,有可能找到多个50,这些情况都要考虑)

2、写一个斗地主的发牌程序(黑桃、红心、梅花和方块的对应Unicode值为\u2660\u2665\u2663\u2666,先生成一副按顺序排放的54张牌,放入字符串中,然后用随机方法取,取一张删一张)

3、显示任意一个月份的日历(年份>1900)(一周一行,要有月名、表头和横线。

按列右对齐,用String.format("%1$4d",intNumber)可以将任意整数intNumber格式化成前面补“空格”的4位定长字符串)

4、显示出任一年份的日历(年份>1900)

5、用数组模拟实现一个50个字符串的堆栈,并使这个堆栈有如下方法和参数:

myStack:

数组名,使用时不能直接对这个数组进行存取操作,存取操作都通过pop()和push()等方法完成。

实现pop():

弹出

实现push():

压入

实现isFull():

是否已满

实现isEmpty():

是否为空

实现length():

已有多少元素

要点:

要将代码设计成有通用性,也就是说要考虑各种可能的情况,考虑越多,你的程序就越稳定可靠,高可靠性的代码一直是一个开发人员追求的最高目标之一。

6、使用堆栈,将中缀算术表达式转换成后缀表达式。

A、表达式中只有+(加)、-(减)、×,/,%,(,)六种运算符

B、变量名为以英文字母开头的字母数字串

C、表达式中可以出现不带符号的常数

D、适当判断表达式中的语法错误

E、不计算结果

 

实验步骤:

1、题目分析

2、查找编程需要的资料

3、算法设计

4、程序代码编写

(1)题目1:

1、题目要求随机生成100个0~200的整数,并用折半查找50的位置

2、折半查找需首先对随机生成的200个随机数进行排序才能进行查找

3、程序用于折半查找的方法binarySearch()代码如下:

staticintbinarySearch(int[]myArray,intsearchkey)//二分查找

{

inthigh=myArray.length-1;//high记录比较的高位下标

intlow=0;//low记录比较的低位下标

intmid=0;//mid记录比较的中间下标,即需要进行与50进行比较的数的下标

while(high>=low)

{

mid=(high+low)/2;

if(myArray[mid]==searchkey)//找到返回mid+1,下标+1为50的位置

returnmid;

else

if(myArray[mid]<50)

low=mid+1;

else

high=mid-1;//找不到返回-1

}

return-1;

}

 

程序完整代码如下:

importjava.util.Arrays;

publicclassExp3_01{

publicstaticvoidmain(String[]args)

{

intsub=0;//记录随机生成数中50的位置

int[]myArray=newint[100];//存放100个随机数

myArray=getInts();//获取随机整数

Arrays.sort(myArray);//给随机数排序

sub=binarySearch(myArray,50);//用二分法找到50的位置并返回赋值给sub

System.out.print("排序后的随机数列:

");

disPlayArray(myArray);//输出100个随机数

displayKey(myArray,sub,50);

}

staticint[]getInts()//获取100个随机整数

{

int[]radomArray=newint[100];

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

{

radomArray[i]=(int)(Math.random()*200);//获取的0~1之间的浮点数*200并转为整型

}

returnradomArray;//返回随机数数组

}

staticintbinarySearch(int[]myArray,intsearchkey)//二分查找

{

inthigh=myArray.length-1;//high记录比较的高位下标

intlow=0;//low记录比较的低位下标

intmid=0;//mid记录比较的中间下标,即需要进行与50进行比较的数的下标

while(high>=low)

{

mid=(high+low)/2;

if(myArray[mid]==searchkey)//找到返回mid+1,下标+1为50的位置

returnmid;

else

if(myArray[mid]<50)

low=mid+1;

else

high=mid-1;//找不到返回-1

}

return-1;

}

staticvoiddisPlayArray(int[]radomArray)//输出100个随机数

{

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

{

if(i%5==0)

System.out.println();

System.out.print("radomArray["+i+"]="+radomArray[i]+""+"\t");

}

}

staticvoiddisplayKey(int[]myArray,intsub,intkey)//输出随机数中所有50的位置

{

inthigh=sub+1;

intlow=sub-1;

if(sub>0)//随机数中有50,则分两组分别向前和向后遍历并输出,直到找到一个不为50的数为止

{

System.out.println("\n\n随机生成的100个数中50是第"+(sub+1)+"个数!

");

while(myArray[low--]==key)//向前遍历

{

System.out.println("随机生成的100个数中50是第"+(low+2)+"个数!

");

}

while(myArray[high++]==key)//向后遍历

{

System.out.println("随机生成的100个数中50是第"+high+"个数!

");

}

}

else//随机数中没有50

System.out.println("\n\n随机生成的100个数中没有50!

");

}

}

(2)题目2:

1、题目要求编写斗地主的发牌程序

2、主要要解决的问题有:

54张牌的初始化、以及随机产生的三个玩家牌和底牌

3、经过各种分析设计,得到以下方法:

54张牌的初始化:

staticvoidgetcards(String[]cardbuffer)//获取54张扑克牌

{

for(inti=0;i<13;i++)//首先分13组获取52张牌,分别获取各花色的1~10以及J、Q、K

{

switch(i+1)

{case1:

//1~10各花色直接获取其花色+1~10

case2:

case3:

case4:

case5:

case6:

case7:

case8:

case9:

case10:

cardbuffer[4*i]=("黑桃"+(i+1));

cardbuffer[4*i+1]=("红桃"+(i+1));

cardbuffer[4*i+2]=("梅花"+(i+1));

cardbuffer[4*i+3]=("方块"+(i+1));

break;

case11:

cardbuffer[4*i]=("黑桃J");//11~13各花色获取其花色+J/Q/K

cardbuffer[4*i+1]=("红桃J");

cardbuffer[4*i+2]=("梅花J");

cardbuffer[4*i+3]=("方块J");

break;

case12:

cardbuffer[4*i]=("黑桃Q");

cardbuffer[4*i+1]=("红桃Q");

cardbuffer[4*i+2]=("梅花Q");

cardbuffer[4*i+3]=("方块Q");

break;

case13:

cardbuffer[4*i]=("黑桃K");

cardbuffer[4*i+1]=("红桃K");

cardbuffer[4*i+2]=("梅花K");

cardbuffer[4*i+3]=("方块K");

break;

}

}

cardbuffer[52]="Joker1";//最后获取大王小王,Joker1/Joker2

cardbuffer[53]="Joker2";

}

发牌:

staticvoiddealCards(String[]cardbuffer,String[]player1,String[]player2,String[]player3,String[]holeCards)

{//随机发牌

intrandom1=0;//三位玩家要发的牌的随机数

intrandom2=0;

intrandom3=0;

for(inti=0;i

{

while(cardbuffer[random1]=="")random1=(int)(Math.random()*54);

player1[i]=cardbuffer[random1];//获取0~53的随机数,知道这个位置的牌不为空,发给玩家

cardbuffer[random1]="";//牌发给玩家后,将当前牌的值置为空

while(cardbuffer[random2]=="")random2=(int)(Math.random()*54);

player2[i]=cardbuffer[random2];

cardbuffer[random2]="";

while(cardbuffer[random3]=="")random3=(int)(Math.random()*54);

player3[i]=cardbuffer[random3];

cardbuffer[random3]="";

}

for(intj=0;j

{

for(inti=0;i

{

if(cardbuffer[i]!

="")

{

holeCards[j]=cardbuffer[i];

cardbuffer[i]="";

i=cardbuffer.length;

}

}

}

}

 

程序完整代码如下:

publicclassExp3_02{

publicstaticvoidmain(String[]args)

{

Stringcardbuffer[]=newString[54];//定义字符串型数组cardbuffer用来存放54张扑克牌

Stringplayer1[]=newString[17];//定义字符串型数组player1用来存放17张玩家1的扑克牌

Stringplayer2[]=newString[17];//定义字符串型数组player2用来存放17张玩家2扑克牌

Stringplayer3[]=newString[17];//定义字符串型数组player3用来存放12张玩家3扑克牌

StringholeCards[]=newString[3];//定义字符串型数组holeCards用来存放3张底牌

getcards(cardbuffer);//获取54张扑克牌

dealCards(cardbuffer,player1,player2,player3,holeCards);//随机发牌

System.out.println("玩家1的牌:

");//输出哥玩家的牌和底牌

showCards(player1);

System.out.println("玩家2的牌:

");

showCards(player2);

System.out.println("玩家3的牌:

");

showCards(player3);

System.out.println("底牌:

");

showCards(holeCards);

System.out.println();

}

staticvoidgetcards(String[]cardbuffer)//获取54张扑克牌

{

for(inti=0;i<13;i++)//首先分13组获取52张牌,分别获取各花色的1~10以及J、Q、K

{

switch(i+1)

{case1:

//1~10各花色直接获取其花色+1~10

case2:

case3:

case4:

case5:

case6:

case7:

case8:

case9:

case10:

cardbuffer[4*i]=("黑桃"+(i+1));

cardbuffer[4*i+1]=("红桃"+(i+1));

cardbuffer[4*i+2]=("梅花"+(i+1));

cardbuffer[4*i+3]=("方块"+(i+1));

break;

case11:

cardbuffer[4*i]=("黑桃J");//11~13各花色获取其花色+J/Q/K

cardbuffer[4*i+1]=("红桃J");

cardbuffer[4*i+2]=("梅花J");

cardbuffer[4*i+3]=("方块J");

break;

case12:

cardbuffer[4*i]=("黑桃Q");

cardbuffer[4*i+1]=("红桃Q");

cardbuffer[4*i+2]=("梅花Q");

cardbuffer[4*i+3]=("方块Q");

break;

case13:

cardbuffer[4*i]=("黑桃K");

cardbuffer[4*i+1]=("红桃K");

cardbuffer[4*i+2]=("梅花K");

cardbuffer[4*i+3]=("方块K");

break;

}

}

cardbuffer[52]="Joker1";//最后获取大王小王,Joker1/Joker2

cardbuffer[53]="Joker2";

}

staticvoiddealCards(String[]cardbuffer,String[]player1,String[]player2,String[]player3,String[]holeCards)

{//随机发牌

intrandom1=0;//三位玩家要发的牌的随机数

intrandom2=0;

intrandom3=0;

for(inti=0;i

{

while(cardbuffer[random1]=="")random1=(int)(Math.random()*54);

player1[i]=cardbuffer[random1];//获取0~53的随机数,知道这个位置的牌不为空,发给玩家

cardbuffer[random1]="";//牌发给玩家后,将当前牌的值置为空

while(cardbuffer[random2]=="")random2=(int)(Math.random()*54);

player2[i]=cardbuffer[random2];

cardbuffer[random2]="";

while(cardbuffer[random3]=="")random3=(int)(Math.random()*54);

player3[i]=cardbuffer[random3];

cardbuffer[random3]="";

}

for(intj=0;j

{

for(inti=0;i

{

if(cardbuffer[i]!

="")

{

holeCards[j]=cardbuffer[i];

cardbuffer[i]="";

i=cardbuffer.length;

}

}

}

}

staticvoidshowCards(String[]cards)

{//输出扑克牌

for(inti=0;i

System.out.print(cards[i]+"\t");

System.out.println();

System.out.println();

}

}

(3)题目3、4:

1、题目3要求是打印出月历,而题目4是年历,完成月历后,便可完成年历,故此将题目3、4一起做

2、日历的算法,是以1900年1月1日(星期一)为基数,在此基础上计算出所求日期离1900年1月1日(星期一)的天数推算出日历

4、经过各种分析设计,得到以下方法:

计算距离1900年1月1日(星期一)的天数:

staticlonggetTotledays(intyear,intmonth)//计算距离1900年1月1日的天数

{

longtotleDays=0;

for(inti=1900;i

{

totleDays+=getYeardays(i);

}

for(inti=1;i

{

totleDays+=getMonthdays(year,i);

}

returntotleDays;

}

打印出一个月的日历:

staticvoidcalendar(intyear,intmonth)//打印出一个月份的日历

{

intfirstday=1;//要打印日历的第一天,1900年1月1日作比较基点是星期一,firstday初始值是星期一

longtotleDays=getTotledays(year,month);

firstday=(int)(totleDays%7);//距离1900年1月1日的天数对7取模,所得即为第一天的星期数

System.out.println(""+year+"-"+month+"");

System.out.println("-----------------------------------");

System.out.println("SunMonTueWedThuFriSat");

for(inti=0;i

System.out.print("");//在当月1号对应星期数之前的几天添加空格

for(inti=1;i<=getMonthdays(year,month);i++)//输出当月信息

{

System.out.print(String.format("%1$5d",i));

if((i+firstday)%7==0)

System.out.println();

}

}

程序完整代码如下:

importjava.io.BufferedReader;

importjava.io.IOException;

importjava.io.InputStreamReader;

publicclassExp3_03{

publicstaticvoidmain(String[]args)

{

Stringstr1="请输入

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

当前位置:首页 > 工作范文 > 演讲主持

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1