1、Java 语言程序设计实验报告实验序号:三实验项目名称:熟悉 MyEclipse IDE、熟悉 Java 程序结构及简单语句学 号 1209050160 姓 名 鲁思成 专业、班 计科 1201实验地点 文波 217 指导教师 韩志龙 时间 2014-4-10一、实验目的及要求1、进一步熟练Java语法和常用方法的使用;2、进一步熟练Java程序结构;3、进一步提高算法设计与实现的能力;4、为后续章节的学习打下坚实的基础;二、实验设备(环境)Windows8 MyEclipse三、实验内容与步骤1、随机生成100个0到200的整数(包括0和200) ,用折半查找法(二分法)查找50是第几个数,
2、 并输出查找过程(即和什么数进行了比较) 。 (输出排序之前的序号)(折半查找是在已经排序的数据中做的查找,所以先要排序。有可能找不到50,有可能找到多个50,这些情况都要考虑)2、写一个斗地主的发牌程序(黑桃、红心、梅花和方块的对应Unicode值为u2660u2665u2663u2666,先生成一副按顺序排放的54张牌,放入字符串中,然后用随机方法取, 取一张删一张)3、显示任意一个月份的日历(年份1900) (一周一行,要有月名、表头和横线。按列右对齐, 用 String.format(“%1$ 4d“,intNumber)可以将任意整数intNumber 格式化成前面补“空格”的 4
3、位定长字符串)4、显示出任一年份的日历(年份1900)5、用数组模拟实现一个50个字符串的堆栈,并使这个堆栈有如下方法和参数:myStack:数组名,使用时不能直接对这个数组进行存取操作,存取操作都通过pop()和push()等方法完成。实现pop(): 弹出实现push():压入实现isFull():是否已满实现isEmpty():是否为空实现length():已有多少元素要点:要将代码设计成有通用性,也就是说要考虑各种可能的情况,考虑越多,你的程序就越稳定可靠,高可靠性的代码一直是一个开发人员追求的最高目标之一。6、使用堆栈,将中缀算术表达式转换成后缀表达式。A、表达式中只有(加)、(减)
4、、,/,(,)六种运算符B、变量名为以英文字母开头的字母数字串C、表达式中可以出现不带符号的常数D、适当判断表达式中的语法错误E、不计算结果7、迷宫找路径。开始扫描;数字时,加入后缀表达式;运算符:a. 若为 (,入栈;b. 若为 ),则依次把栈中的的运算符加入后缀表达式中,直到出现(,从栈中删除( ;c. 若为 除括号外的其他运算符 , 当其优先级高于栈顶运算符时,直接入栈。否则从栈顶开始,依次弹出比当前处理的运算符优先级高和优先级相等的运算符,直到一个比它优先级低的或者遇到了一个左括号为止。当扫描的中缀表达式结束时,栈中的的所有运算符出栈; 4、实验结果与数据处理实验代码如下:import
5、 java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.util.Scanner;public class ExperimentThreepublic static void main(String args)questionOne();questionTwo();questionThree();questionFour();questionSix();static void questionOne()/问题一Scanner scanner = new Sca
6、nner(System.in);/ 创 建一个Scanner对象用于获取键盘输入System.out.println(“请输入随机整数最大值 “);int max = scanner.nextInt();System.out.println(“请输入随机整数个数“);int length = scanner.nextInt();int myArray=new intlength;/用于存放随机数int orderArray=new intlength;/用于存放随机数序号getArray(myArray,orderArray,max);/生成随机数System.out.println(“生成的
7、随机整数为:“);outPut(myArray);/输出随机数System.out.println(“排序后的随机整数为: “);order(myArray,orderArray);/给数组排序outPut(myArray);/输出排序后的数组System.out.println(“请输入查找的整数“);int searchKey= scanner.nextInt();if(0myArrayj)tmp=myArrayi;myArrayi=myArrayj;myArrayj=tmp;/给随机数排序tmp=orderArrayi;orderArrayi=orderArrayj;orderArray
8、j=tmp;/随机数位置跟随 变换static void locating(int myArray,int orderArray,int searchKey)/查找int low=0;int high=myArray.length-1;int mid=(low+high)/2;int time=1;boolean flag=false;/用于记录是否存在查找数while(lowsearchKey)System.out.println(“第“+time+“次,“ +searchKey+“比第“+(mid+1)+“个数“+myArraymid+“小,向左移动“ );high=mid-1;else
9、if(myArraymidsearchKey)System.out.println(“第“+time+“次,“ +searchKey+“比第“+(mid+1)+“个数“+myArraymid+“大,向右移动“ );low=mid+1;elseSystem.out.println(“第“+time+“次,找到“ +searchKey+“,在原随机数中序号为“+orderArraymid);flag=true;break;time+;if(flag=true)low=mid-1;high=mid+1;while(myArraylow-=searchKey)time+;System.out.prin
10、tln(“第“+time+“次,向左遍历,“ +searchKey+“在原随机数中序号为“+orderArraylow-1);while(myArrayhigh+=searchKey)time+;System.out.println(“第“+time+“次,向右遍历,“ +searchKey+“在原随机数中序号为“+orderArrayhigh+1);elseSystem.out.println(“随机整数中没有“+searchKey);static void getCards(String cardBuffer)/生成54张扑克牌for(int i=0;i13;i+)/分13组生成除了大小王
11、的52张牌switch(i+1)case 1:cardBuffer4*i=(“黑桃A“);cardBuffer4*i+1=(“红桃A“);cardBuffer4*i+2=(“梅花A“);cardBuffer4*i+3=(“方片A“);break;case 2:case 3:case 4:case 5:case 6:case 7:case 8:case 9:case 10:cardBuffer4*i=(“黑桃“ +(i+1);cardBuffer4*i+1=(“红桃“+(i+1);cardBuffer4*i+2=(“梅花“+(i+1);cardBuffer4*i+3=(“方片“+(i+1);br
12、eak;case 11:cardBuffer4*i=(“黑桃J“);cardBuffer4*i+1=(“红桃J“);cardBuffer4*i+2=(“梅花J“);cardBuffer4*i+3=(“方片J“);break;case 12:cardBuffer4*i=(“黑桃Q“);cardBuffer4*i+1=(“红桃Q“);cardBuffer4*i+2=(“梅花Q“);cardBuffer4*i+3=(“方片Q“);break;case 13:cardBuffer4*i=(“黑桃K“);cardBuffer4*i+1=(“红桃K“);cardBuffer4*i+2=(“梅花K“);ca
13、rdBuffer4*i+3=(“方片K“);break;cardBuffer52=(“Big Joker“);cardBuffer53=(“Little Joker“);/生成大小王static void dealCards(String cardBuffer,String player)/发牌int random=0;for(int i=0;iplayer.length;i+)dorandom=(int)(Math.random()*54);while(cardBufferrandom=(“);playeri=cardBufferrandom;cardBufferrandom=(“);sta
14、tic void showCards(String cardBuffer)for(int i=0;icardBuffer.length;i+)System.out.print(cardBufferi+“t“);System.out.println();static int getYeardays(int year)/判断年份是闰年还是平年并返回对应年份的天数if(year%4=0)return 366;/闰年366天elsereturn 365;/平年365天static int getMonthdays(int year,int month)/给定年份、月份,获取当月天数int monthD
15、ays=0;switch(month)case 1: monthDays=31;break;case 2:if(year%4=0)monthDays=29;else monthDays=28;break;/2月闰年29 天,平年28天case 3: monthDays=31;break;case 4: monthDays=30;break;case 5: monthDays=31;break;case 6: monthDays=30;break;case 7: monthDays=31;break;case 8: monthDays=31;break;case 9: monthDays=30;
16、break;case 10:monthDays=31;break;case 11:monthDays=30;break;case 12:monthDays=31;break;return monthDays;static long getTotledays(int year,int month)/计算距离1900 年1月1日的天数long totleDays=0;for(int i=1900;iyear;i+)/从1900 年开始将每年的天数加起来,加到当前年份的前一年totleDays+=getYeardays(i);for(int i=1;imonth;i+)/从当前年份1月开始将每月的天
17、数加起来,加到当前月份的前一月totleDays+=getMonthdays(year,i);return totleDays;static void calendar(int year,int month)/打印出一个月份的日历int firstday=1;/要打印日历的第一天,1900年1月1日作比较基点是星期一,firstday初始值是星期一long totleDays=getTotledays(year,month);firstday=(int)(totleDays%7);/距离1900年1月1 日的天数对7取模,所得即为第一天的星期数System.out.println(“ “+ye
18、ar+“-“+month+“ “);System.out.println(“-“);System.out.println(“ Sun Mon Tue Wed Thu Fri Sat“);for(int i=0;ifirstday;i+)System.out.print(“ “);/在当月1号对应星期数之前的几天添加空格for(int i=1;i=getMonthdays(year,month);i+)/输出当月信息System.out.print(String.format(“%1$ 5d“,i);if(i+firstday)%7=0)System.out.println();static i
19、nt intInputValue;public 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.pa
20、rseInt(strInput);catch(IOException e)System.out.println(“IO错误!请重新运行程序。 “);return false;catch(NumberFormatException e)System.out.println(“你的输入可能有格式 错误!请重新运行程序。“);return false;intInputValue=anInteger;return true;static void expressionSwitch(String nifixExpression)String postfixExpression =“;/String型po
21、stfixExpression用来存放后缀表达式String myStack=new String50;/把myStack50 当做堆栈用char nifix=nifixExpression.toCharArray();/将中追表达式转换为字符数组型for(int i=0;inifix.length;i+)/依次判断中缀表达式的每一个字符switch(nifixi)case (:/ 若为 (,入栈;push(myStack,“(“);break;case ):/b. 若为 ),则依次把栈中的的运算符加入后缀表达式中,直到出现(,从栈中删除( ;String top=pop(myStack);w
22、hile(top!=“(“top=pop(myStack);break;/*若为 除括号外的其他运算符 ?, 当其优先级高于栈顶运算符时,直接入栈。*否则从栈顶 开始,依次弹出比当前处理的运算符优先级高和优先级相等的运算符,*直到一个比它 优先级低的或者遇到了一个左括号为止。*/case +:;case -:top=pop(myStack);while(top!=“(“top=pop(myStack);push(myStack,top);push(myStack,String.valueOf(nifixi);break;case *:case /:case %:top=pop(myStack)
23、;if(top!=“*“push(myStack,String.valueOf(nifixi);elsewhile(top!=“+“top=pop(myStack);push(myStack,top);push(myStack,String.valueOf(nifixi);break;default:/其他数字或 变量时,加入后缀 表达式;postfixExpression+=String.valueOf(nifixi);break;String top=null;/当扫描的中缀表达式结束时,栈中的所有运算符出栈top=pop(myStack);while(top!=null)postfixE
24、xpression+=top;top=pop(myStack);System.out.println(“转换为后缀表达式:“);System.out.println(postfixExpression);/输出后缀表达式/*堆栈出栈、入栈等方法*/static String pop(String stack)/ 弹出栈顶 元素,并返回栈顶元素String poper;int i=0;if(isEmpty(stack)/堆栈为空,返回值为null,出栈失败poper=null;elsewhile(stacki+!=null/堆栈不为空,将栈顶元素赋给poper ,返回poper=stacki-2
25、;stacki-2=null;return poper;static boolean push(String stack,String pusher)/元素入栈int i=0;if(isFull(stack)/堆栈已满,返回false,入栈失败return false;else if(pusher=null)return false;elsewhile(stacki+!=null/堆栈不为空,将栈顶元素pusher赋给栈顶,返回true,入栈成功stacki-1=pusher;return true;static boolean isFull(String stack)/堆栈是否已满if(st
26、ackstack.length-1=null)/stack的最后一个元素为空,则堆栈未满,返回falsereturn false;else return true;static boolean isEmpty(String stack)/堆栈是否为空if(stack0=null)/stack的第一个元素为空,则堆栈为空,返回truereturn true;elsereturn false;static int length(String stack)/堆栈已有多少元素int i=0;while(stacki+!=nullreturn i;/*键盘输入字符串方法*/public static S
27、tring getStringInput(String aPrompt)String str=“;trySystem.out.println(aPrompt+“: “);BufferedReader br=new BufferedReader(new InputStreamReader(System.in);str=br.readLine();catch(IOException e)System.out.println(“IO错误!请重新运行程序。 “);return null;return str;实验结果:五、分析与讨论(体会、感想、意见、建议)教师评语及成绩:签名:日期:说明:1、 同学们可以直接在这个格式文件中填写你们的实验过程及结果;2、 实验报告文件要统一命名格式:“电商 0802_JavaExp1_姓名” , “计科 0901_JavaExp1_姓名” , “电商 0902_JavaExp1_姓名” ,请注意,中间的分隔符是英文下划线。3、 如果不按此格式命名,将拒收实验报告,改正后再上交;4、 坚决杜绝抄袭,如果发现有抄袭者,实验报告为 0 分;(本课程最后成绩,实验占 40%,期末考试占 605、 按时完成报告,班干部收集,然后集中上交老师。请注意,一定不要直接交给老师,这样容易丢失。7、 “分析与讨论”部分通常会占 10%至 20%的分数。