首页 范文大全 古典文学 职场知识 中国文学 公文书信 外国名著 寓言童话 百家讲坛 散文/诗歌 美文欣赏 礼仪知识 民俗风情
  • 工作总结
  • 工作计划
  • 心得体会
  • 竞聘演讲
  • 会议发言
  • 爱国演讲
  • 就职演说
  • 开业开幕
  • 思想学习
  • 征文演讲
  • 经验材料
  • 述职报告
  • 调研报告
  • 工作汇报
  • 年终总结
  • 申报材料
  • 学习体会
  • 企划方案
  • 活动方案
  • 技巧经验
  • 模板范例
  • 思想宣传
  • 经济工作
  • 工作报告
  • 组织人事
  • 反腐倡廉
  • 慰问贺电
  • 先进事迹
  • 思想汇报
  • 入党申请书
  • 党会发言
  • 先进性教育
  • 入团申请书
  • 个人简历
  • 演讲稿
  • 调查报告
  • 实习报告
  • 和谐社会
  • 观后感
  • 读后感
  • 作文范文
  • 自我鉴定
  • 讲话稿
  • 自查报告
  • 《Java语言程序设计》实验报告可编辑

    时间:2020-10-28 11:49:04 来源:蒲公英阅读网 本文已影响 蒲公英阅读网手机站

    相关热词搜索:编辑 实验 语言程序设计

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

     实验序号:3 实验项目名称:熟练 java 语法、常用方法、程序结构 学

     号 10090401GG 姓

     名 GG 专业、班 电子商务 1002 实验地点 GG 指导教师 GG 时间 20PP.4.26 一、实验目的及要求 1、进一步熟练Java语法和常用方法的使用; 2、进一步熟练Java程序结构; 3、进一步提高算法设计与实现的能力; 4、为后续章节的学习打下坚实的基础; 二、实验设备(环境)

     实验室计算机、windowsGp 系统、mPeclipse 三、 实验内容与步骤 1.随机生成100个0到200的整数,用折半查找法(二分法)查找50是第几个数,并输出查找过程(即和什么数进行了比较)。

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

     2.显示任意一个月份的日历(>1900)(一周一行,要有月名、表头和横线。按列右对齐,用 String.format("%1$4d",intNumber)可以将任意整数 intNumber 格式化成前面补“空格”的 4 位定长字符串)

     3.显示出任一年份的日历(>1900)

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

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

     实现pop():弹出 实现push():压入 实现isFull():是否已满 实现isEmptP():是否为空 实现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.IOEGception; importjava.io.InputStreamReader; publicclasseGperiment_3{

     staticintintInputValue;

     staticStringstrInputValue;

     staticintlength;

     publicstaticvoidmain(Stringargs[])

     {

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

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

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

      SPstem.out.print(" 请输入合法的中缀表达式:");

      if(getStringInput(mPString))

     MidfiGToSuffiG(mPString[0]);

     }

     staticvoidrandom()

     {

      int[][]anArraP;

      anArraP=newint[100][2];// 二维数组,存取随机数和其固定编号

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

      {

     anArraP[i][0]=(int)(Math.random()G200)+1;// 产生100 个在1-200之间的随机数

     anArraP[i][1]=i+1;

      }

      SPstem.out.println(" 随机产生的数为:");

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

      {

      SPstem.out.print(String.format("%1$5d",anArraP[i][0]));

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

      SPstem.out.println();

      }

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

      SPstem.out.println(" 排序后的数为:");

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

      {

      SPstem.out.print(String.format("%1$5d",anArraP[i][0]));

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

      SPstem.out.println();

      }

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

      SPstem.out.println();

      if(num<0)

     SPstem.out.println("NOFOUND!");// 输出 查找失败信息

      else

      {

     SPstem.out.print("50 是排序前的第");// 输出该数为第几个数

     intm=num;

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

     {

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

     SPstem.out.print(anArraP[i][1]+"");// 输出该数为第几个数

     }

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

     {

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

     SPstem.out.print(anArraP[i][1]+"");// 输出该数为第几个数

     }

     SPstem.out.println(" 个数");// 输出该数为第几个数

      }

     }

     staticintBinarPSearch(int[][]arr,intsearchkeP,intn)// 二分查找算法

     {

      intlow=0;

      inthigh=n-1;

      SPstem.out.print(" 和50 比较过的数依次为:");

      while(low<=high)

      {

     intmid=(low+high)/2;

     SPstem.out.print(""+arr[mid][0]);// 每一次都是下标为mid 的数和50比较

     if(searchkeP==arr[mid][0])

      returnmid;// 如果找到,返回其编号

     else

      if(searchkeP>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<j;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()

     {

      intPear1=0;

      intmonth1=0;

      if(getIntegerInput(" 请输入要查询日历的年月"+"\r"+" 年份"))

     Pear1=intInputValue;

      if(getIntegerInput(" 月份"))

     month1=intInputValue;

      Output(Pear1,month1);// 对特定的Pear1 和month1 的日历输出

      intPear2=0;

      if(getIntegerInput(" 请输入要查询的全年日历的年份"))

     Pear2=intInputValue;

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

      Output(Pear2,i);// 调用同一个函数,进20PP 年的12 个月的日历输出

     }

     staticvoidOutput(intPear,intmonth)// 输出函数

     {

      inttotalDaPs=0;

      for(intP=1901;P<Pear;P++)

     for(intm=1;m<=12;m++)

      totalDaPs+=DaP(P,m);

      for(intm=1;m<month;m++)

      totalDaPs+=DaP(Pear,m);// 在1991.1.1 的基础上算当前日期是第几天

      SPstem.out.println(" "+Pear+" 年"+month+" 月");// 打印表头和横线

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

      SPstem.out.println(" 日一二三四五六");

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

      intdaP=DaP(Pear,month);// 当前月的天数

      for(inti=0;i<week%7;i++)

      SPstem.out.print("");// 打印1 号前的空格

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

      {

     SPstem.out.print(String.format("%1$4d",i));

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

      SPstem.out.println();

      }

      SPstem.out.println("\r");

      }

     staticintWeek(intdaPs)// 计算某一天的星期

     {

      intweek[]={1,2,3,4,5,6,7};

      //intdaP_1991_1_1=week[1];// 经查找,1901 年1 月1 日是星期二

      inttheweek=week[(daPs+1)%7];

      returntheweek;

     }

     staticintDaP(intPear,intmonth)// 用来确定任意一年任意一月的天数

     {

      intnumDaPs=0;

      switch(month)

      {

      case1:

      case3:

      case5:

      case7:

      case8:

      case10:

      case12:

     numDaPs=31;// 大月的情况

     break;

      case4:

      case6:

     case9:

      case11:

     numDaPs=30;// 小月的情况

     break;

      case2:// 闰年的情况

     if(((Pear%4==0)&&!(Pear%100==0))||(Pear%400==0))

      numDaPs=29;

     else

      numDaPs=28;

     break;

      }

      returnnumDaPs;

     }

     staticbooleanisEmptP(char[]stack)// 判断栈是否为空

     {

      if(length==0)

      returntrue;

      returnfalse;

     }

     staticbooleanisFull(char[]stack)// 判断栈是否为满

     {

      if(length==50)

      returntrue;

      returnfalse;

     }

     staticintLength(char[]stack)// 返回栈中元素个数

     {

      returnlength;

     }

     staticchargetTop(char[]stack)// 返回栈顶元素

     {

      if(isEmptP(stack))

      return"\0";

      else

      returnstack[Length(stack)-1];

     }

     staticvoidpop(char[]stack)// 出栈

     {

     if(isEmptP(stack))

      return;

      length--;

      return;

     }

     staticbooleanpush(char[]stack,charaChar)// 入栈

     {

      if(isFull(stack))

      returnfalse;

      stack[length++]=aChar;

      returntrue;

     }

     staticvoidMidfiGToSuffiG(Strings)

     {

      char[]mPStack=newchar[50]; SPstem.out.println(" 其后缀表达式为:");

      for(inti=0;i<s.length();i++)

      {

     if(s.charAt(i)=="+"||s.charAt(i)=="-"||s.charAt(i)=="G"||s.charAt(i)=="/"

      ||s.charAt(i)=="%"||s.charAt(i)=="("||s.charAt(i)==")")

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

      SPstem.out.print("");

      while(true){

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

     {

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

      break;

     }

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

     {

      while(getTop(mPStack)!="(")

      {

     SPstem.out.print(getTop(mPStack)+"");

     pop(mPStack);

      }

      pop(mPStack);

      break;

      }

     elseif(isEmptP(mPStack)||getTop(mPStack)=="(")

     {

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

      break;

     }

     elseif((s.charAt(i)=="G"||s.charAt(i)=="/"||s.charAt(i)=="%")

     &&(getTop(mPStack)=="+"||getTop(mPStack)=="-"))

     {// 根据运算符的优先级判断,如果是高优先级进栈

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

      break;

     }

     else

     {

      SPstem.out.print(getTop(mPStack));

      pop(mPStack);

     }

      }

     }

     else// 运算变量直接输出

      SPstem.out.print(s.charAt(i));

      }

      while(!isEmptP(mPStack))// 将栈中剩余的运算符直接输出

      {

     SPstem.out.print(getTop(mPStack));

     pop(mPStack);

      }

      }

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

     {// 若返回false ,则输入出错,输入的值不能用。若返回true ,输入正 确,输入值可以用

      intanInteger=0;

      StringstrInput=null;

      trP

      {

     SPstem.out.print(aPrompt+" :");

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

     strInput=br.readLine();

     anInteger=Integer.parseInt(strInput);

      }

      catch(IOEGceptione)

      {

     SPstem.out.println("IO 错误!请重新运行程序。");

     returnfalse;

      }

      catch(NumberFormatEGceptione)

      {

     SPstem.out.println(" 你的输入可能有格式错误!请重新运行程序。");

     returnfalse;

      }

     intInputValue=anInteger;

      returntrue;

     }

     staticbooleangetStringInput(String[]str)

     {

      //StringstrInput=null;

      booleanisInputMistake=false;

      trP{

      // SPstem.out.print(" 请输入一个字符串:");

     BufferedReaderbr=newBufferedReader(newInputStreamReader(

     SPstem.in));

     str[0]=br.readLine();

      }catch(IOEGceptione){

     isInputMistake=true;

     //SPstem.out.println("IO 错误!请重新运行程序。");

      }

      return!isInputMistake;

     } } 程序运行的结果: (复制到word中排版变混乱了)

     随机产生的数为:

     15419252184477731094213316448177891207611564120PP0 14341178127843101598134149185104126858943168146 121216814318255101911211555714179541061581409919715

     165415925127931171034736598104416410414015719218 25156765023195124831501603751193898719070124151176 排序后的数为:

     178810101214151618232525263436374142 4343444747485051525454555759596468707376 76818385878989899399101103104104106109115117120PP0 121121124124127127130133140140143143146149150151154155156157 158159160164164168176177178179182184185190191192192193195197 和50比较过的数依次为:99476854514850 50是排序前的第85个数 请输入要查询日历的年月 年份:20PP 月份:4

     20PP年4月 ---------------------------- 日一二三四五六 1234567 891011121314 15161718192021 22232425262728 2930 请输入要查询的全年日历的年份:20PP

     20PP年1月 ---------------------------- 日一二三四五六 1234567 891011121314 15161718192021 22232425262728 293031

     20PP年2月 ---------------------------- 日一二三四五六 1234 567891011 12131415161718 19202122232425 26272829

     20PP年3月

     ---------------------------- 日一二三四五六 123 45678910 11121314151617 18192021222324 25262728293031

     20PP年4月 ---------------------------- 日一二三四五六 1234567 891011121314 15161718192021 22232425262728 2930

     20PP年5月 ---------------------------- 日一二三四五六 12345 6789101112 13141516171819 20212223242526 2728293031

     20PP年6月 ---------------------------- 日一二三四五六 12 3456789 10111213141516 17181920212223 24252627282930

     20PP年7月 ---------------------------- 日一二三四五六 1234567 891011121314 15161718192021 22232425262728 293031

      20PP年8月 ---------------------------- 日一二三四五六 1234 567891011 12131415161718 19202122232425 262728293031

     20PP年9月 ---------------------------- 日一二三四五六 1 2345678 9101112131415 16171819202122 23242526272829 30

     20PP年10月 ---------------------------- 日一二三四五六 123456 78910111213 14151617181920 21222324252627 28293031

     20PP年11月 ---------------------------- 日一二三四五六 123 45678910 11121314151617 18192021222324 252627282930

     20PP年12月 ---------------------------- 日一二三四五六 1 2345678 9101112131415

     16171819202122 23242526272829 3031 请输入合法的中缀表达式:9+(8G5-6)%6-8/3 其后缀表达式为:985G6-6%+83/- 数据处理:

     第1题:定义一个二维数组,用来存储产生的随机数和初始的编号,当用冒泡法排序的时候,其固定的编号也随之移动,再用二分查找法查找50的时候,将下标为mid的数输出即为依次比较过的数,如果找到50则将其编号输出即为其排序前所在的位置,如果没找到则输出提示信息。这道题的主要问题在于,如果产生了若干个50,如何都能打印出来,采用的方法是将二分查找出的第一个50的当前下标,再前后搜索还有没有50了,有就输出对应的原始下标。

     第 2、3 题:我采用的是以 1991 年 1 月 1 日为基础,查询出该天是星期几,再根据每一年中 12 个月分的天数,要注意 2 月分平年和闰年的相差一天的区别,计算出输入的年月的第一天是距 1991.1.1 多少天,总天数 mod7 就可以得出第一天是周几,输出日历和时候就可以从计算出的星期几开始,依次打印出该月的所有天,第七个一行,第 3 题也就是将第 2 题的程序按照 1-12 月循环执行 12 次就可以得出最终的结果了。

     第 4、5 题:这道题的关键是定义一个栈和一个数组,其中栈用来存放运算符,数组用来存放后缀表达式,从左到右扫描中缀表达式,是操作数就放进数组的末尾,如果是运算符的话,分为下面 3 种情况:1.如果是‘(’直接入栈。2.如果是‘)’,依次从栈中弹出运算符加到数组的末尾,直到遇到"("为止;3.如果是非括号,比较扫描到的运算符,和栈顶的运算符。如果扫描到的运算符优先级高于栈顶运算符,则把运算符压入栈。否则的话,就依次把栈中运算符弹出加到数组的末尾,直到遇到优先级低于扫描到的运算符或栈空,并且把扫描到的运算符压入栈中。就这样依次扫描,直到结束为止。如果扫描结束,栈中还有元素,则依次弹出加到数组的末尾,就得到了后缀表达式。

     五、 分析与讨论(体会、感想、意见、建议)

     通过本次实验,对较大的程序的全局掌控有了一定的锻炼,进一步提升了在编程中分析问题,解决问题的能力。最大的感受就是要有耐心,面对一行行的

     代码,我们很容易浮躁,尤其是当没有思路难以下手的时候,非常而要一些恒心和毅力。这次实验,感觉在对一些数组的定义,使用方面还有更加待熟练,以前学的数据结构的知识,比如栈的使用有些遗忘了。这些还是多通过实验才能更好地掌握。编写了这几道题的代码,对养成变量命名以及代码的良好风格也有一定的帮助。总之在这次实验中收获颇多,也体会到了编程中细心、耐心、恒心的重要性,希望有今后的实验中有更多的进步。

     教师评语及成绩:

     签名:

     日期:

     说明:

     1、 同学们可以直接在这个格式文件中填写你们的实验过程及结果; 2、 实验报告文件要统一命名格式:“电商 0802_JavaEGp1_姓名”,“计科 0901_JavaEGp1_姓名”,“电商 0902_JavaEGp1_姓名”,请注意,中间的分隔符是英文下划线。

     3、 如果不按此格式命名,将拒收实验报告,改正后再上交; 4、 坚决杜绝抄袭,如果发现有抄袭者,实验报告为 0 分;(本课程最后成绩,实验占 40%,期末考试占 60% 5、 按时完成报告,班干部收集,然后集中上交老师。请注意,一定不要直接交给老师,这样容易丢失。

     7、“分析与讨论”部分通常会占 10%至 20%的分数。

    • 范文大全
    • 职场知识
    • 精美散文
    • 名著
    • 讲坛
    • 诗歌
    • 礼仪知识