java 实验三 控制语句 实验报告.docx
- 文档编号:5710760
- 上传时间:2022-12-31
- 格式:DOCX
- 页数:25
- 大小:4.69MB
java 实验三 控制语句 实验报告.docx
《java 实验三 控制语句 实验报告.docx》由会员分享,可在线阅读,更多相关《java 实验三 控制语句 实验报告.docx(25页珍藏版)》请在冰豆网上搜索。
java实验三控制语句实验报告
实验三控制语句与异常处理
实验目标:
1.掌握三种流程控制方法,
2.掌握键盘输入
3.了解异常处理机制,会编写相应程序;
4.掌握方法重载的含义并能熟练应用。
5.补充了解注解的简单使用。
实验任务:
(本章需把代码package到自定义包里,并给出类图截图)
前言一:
有关JDKAPI文档
JDKAPI文档已在本人电脑上安装,其打开界面截图如下:
前言二:
关于Eclipse调试
本次实验的编程过程不可避免地会遇到错误的,根据其报错和提示修改,直至能执行为止。
其修改过程就不一一截图了。
前言三:
之前在第一章第三个例子servlet中,如果提交中文则出现乱码,在此介绍如何解决这个问题。
这个程序在之前的实验中做过,不过看了本次的实验报告,更加了解之前为何要做出那种修改,对该程序了解得更加透彻
实验3—1,复习熟悉流程控制的语法:
请目测笔算出下列程序的执行结果。
此程序的运算结果为8.其代码及运算结果截图如下:
该程序的类图截图如下:
实验3—2,复习熟悉方法重载、函数返回以及异常处理:
(1)请目测以下程序能编译通过吗?
若不能请问哪里有什么错误?
目测该程序不能运行,因为里面存在重复方法,类型不匹配,还有缺少方法的返回类型。
(2)如有错误则请修改程序,使其完成预期的功能。
修改完的代码及运行结果截图如下:
该程序的类图截图如下图所示:
实验3—3、实验要求:
学习键盘输入,熟悉异常处理的编码。
编写程序,接受10个从键盘输入的任意整数,请使用冒泡排序算法完成对这些整数排序,并输出排序结果。
该程序代码如下:
packagezi;
importjava.util.Scanner;
publicclassEx3_3{
publicstaticvoidmain(String[]args){
System.out.println("请输入要输入的数据的个数:
");
Scannersc=newScanner(System.in);
intsum=sc.nextInt();
System.out.println("请输入要排序的数据:
");
int[]a=newint[sum];
for(inti=0;i a[i]=sc.nextInt(); } bubbleSort1(a,a.length); System.out.println("排序后为: "); for(inti=0;i System.out.print(a[i]+"\t"); } } publicstaticvoidbubbleSort1(int[]a,intlength){ if(length==1) return; for(inti=0;i if(a[i]>a[i+1]){ inttemp=a[i]; a[i]=a[i+1]; a[i+1]=temp; } } bubbleSort1(a,length-1); } } 该程序的执行结果截图如下: 该程序的类图截图如下: 实验3—4、猜数字游戏: 请学习通用对话框以及随机数的生成。 实验要求: 完成一个Java应用程序,实现下列功能: 1)程序随机分配给客户一个1—100之间的整数 2)用户在输入对话框中输入自己的猜测 3)程序返回提示信息,提示信息分别是: “猜大了”、“猜小了”和“猜对了”。 4)用户可根据提示信息再次输入猜测,直到提示信息是“猜对了”。 该程序的代码如下: packagezi; importjavax.swing.JOptionPane; publicclassEx3_4{ publicstaticvoidmain(Stringargs[]){ JOptionPane.showMessageDialog(null,"给你一个1至100之间的整数,请猜测这个数"); intrealNumber=(int)(Math.random()*100)+1; intyourGuess=0; Stringstr=JOptionPane.showInputDialog("输入您的猜测: "); yourGuess=Integer.parseInt(str); while(yourGuess! =realNumber){ if(yourGuess>realNumber){ str=JOptionPane.showInputDialog("猜大了,再输入你的猜测: "); yourGuess=Integer.parseInt(str); } elseif(yourGuess str=JOptionPane.showInputDialog("猜小了,再输入你的猜测: "); yourGuess=Integer.parseInt(str); } } JOptionPane.showMessageDialog(null,"恭喜你,猜对了! 数为: "+yourGuess); } } 该程序的执行结果如下图所示: 该程序的类图截图如下图所示: 实验后的思考: 1.用“yourGuess>realNumber”替换【代码1】,可以么? 答: 可以。 其执行结果如下: 2.语句: “JOptionPane.showMessageDialog(null,"猜对了! 这个数就是"+realNumber);”为何要放在while循环语句之后? 放在while语句的循环体中合理吗? 请将回答写在实验报告中。 这个问题我不太了解,XX也查不出个所以然。 实验3—5、分析并运行下面程序,并回答下面问题,最后完善异常处理程序。 publicclassQuestion9_1{ publicvoidrun(){ for(inti=0;i<4;i++){ inta; try{ switch(i){ case0: //除数为0 intzero=0; a=4/zero; break; case1: //数组越界访问 int[]b=newint[5]; a=b[5]; break; case2: int[]c=newint[-1]; a=c[0]; break; case3: int[]d=null; a=d[0]; break; } } catch(Exceptione){ System.out.println("Case"+i+"hasanexception"); System.out.println(e); } } } } 问题: (1)程序运行结果怎样,出现了哪些异常? 程序运行结果截图如下: 该程序运行出现了除数不能为0,数组越界,还有空指针放回等异常。 (2)分析异常是怎样抛出、捕获和处理的? 抛出异常: 在方法的运行过程中,如果发生了异常,则该方法生成一个代表该异常的对象并把它交给运行时系统,运行时系统便寻找相应的代码来处理这一异常。 捕获异常: 运行时系统在方法的调用栈中查找,从生成异常的方法开始进行回溯,直到找到包含相应异常处理的方法为止。 处理异常方法有两种: 一是声明抛出异常,二是捕获异常。 (3)程序中设计循环目的是什么? 个人认为循环可以节省代码,使程序简明易懂。 实验3—6.、编写程序: 输入一个整数n,计算n的阶乘并捕捉可能出现的异常。 实验要求: (1)阶乘方法命名为factorial(); (2)无论是否出现异常,最后都要能够显示: “Finishcomputingfactorialnumber.”。 (3)当输入的数大于20时,请抛出一个自定义的“数字过大俺算不了”异常(名字自定吧,总之n>20就抛出自定义异常给出提示说数字太大了,算不了阶乘)。 (4)请使用编好的程序分别计算”abc”,”-1”,”20”以及”21”的阶乘,程序输出结果截图。 提示: (1)输入字符串时,可能会产生IOException异常; (2)输入的字符串如果不能转换成int类型,将产生NumberFormatException异常; (3)当输入的字符串转换成int类型之后为负数时,在计算阶乘时,请抛出一个IllegalArgumentException异常; (4)抛出自定义的异常; (5)其他可能异常,也需要给出提示信息。 该程序的代码如下: packagezi; importjava.util.Scanner; importjava.util.Scanner; classtoobigextendsException{ publictoobig(){ super("数字太大算不了! "); } } publicclassEx3_6{ publicstaticvoidmain(String[]args){ System.out.print("请输入一个整数: "); Scannern1=newScanner(System.in); intn=n1.nextInt(); System.out.println(); System.out.print(n+"的阶乘为: "); intsum=factorial(n); System.out.print(sum); } privatestaticintfactorial(inti){ if(i<=1) { return1; } else { return(int)i*factorial(i-1); } } } 执行结果如下图所示: 其类图截图如下: 实验3—7、课本102页习题第6题。 这个题目要求输入0.1元到5.0元的值,然后自动给出最小找零方案,比如输入2.01,就找2.99元,最小找零方案是: 两元1张,五角1枚,二角2枚,五分1枚,二分2枚。 这题主要是算法思路,请大家仔细审题,提供思路如下(参考): (1)存在元、角、分不同币值,在计算时建议统一转换成分,比如5元就是500分,2元就是200分; (2)用几个数组,按顺序存储可以使用的转换后的币值,如200,100,2;还有对应币值的名字,如两元,一元,二分;还有对应的单位,如元,元,枚; (3)怎么才算最小找零方案,张数(枚数)最小就意味着尽量用大币值去找零,所以把找零的总额转成分后,依次除以大币值,得出的商就是该币值的找零张数(枚数),而得出的模(也就是余数)就是继续要找零的,继续除以下一个较小的币值,。 。 。 依次类推,知道最后不再有余数,说明找零成功,把依次得到的商对应相对应的币值输出即可。 该题的代码如下: packagezi; publicclassPrice{ publicstaticvoidmain(Stringargs[]){ System.out.println("输入商品价格: "); floata=Keyboard.getFloat(); intc=(int)(a*100); intb=500-c; System.out.println("找零如下: "); if(b/200! =0){System.out.println(b/200+"张2元");b-=(b/200)*200;} if(b/100! =0){System.out.println(b/100+"张1元");b-=(b/100)*100;} if(b/50! =0){System.out.println(b/50+"张5角");b-=(b/50)*50;} if(b/20! =0){System.out.println(b/20+"张2角");b-=(b/20)*20;} if(b/10! =0){System.out.println(b/10+"张1角");b-=(b/10)*10;} if(b/5! =0){System.out.println(b/5+"个5分");b-=(b/5)*5;} if(b/2! =0){System.out.println(b/2+"个2分");b-=(b/2)*2;} if(b! =0)System.out.println(b+"个1分"); } } packagezi; importjava.io.*; publicclassKeyboard{ staticBufferedReaderinputStream=newBufferedReader(newInputStreamReader(System.in)); publicstaticintgetInteger(){ try{ return(Integer.valueOf(inputStream.readLine().trim()).intValue()); }catch(Exceptione){ e.printStackTrace(); return0; } } publicstaticStringgetString(){ try{ return(inputStream.readLine()); }catch(IOExceptione){ return"0"; } } publicstaticfloatgetFloat(){ Strings=""; try{ BufferedReaderin=newBufferedReader(newInputStreamReader(System.in)); s=in.readLine(); return(Float.parseFloat(s)); } catch(IOExceptione) { System.out.println("输入非法! "); return(0.0f); } } } 其执行结果如下图所示: 其类图的截图如下图所示: 实验3—8、编写Java程序,要求利用方法重载,键盘录入任意2个数或3个数,求最大数,其中,这2个数或3个数要么全是整数,要么全是浮点数。 实验要求: (1)求3个数的时候调用现有的2个数的方法来辅助求解。 (2)需考虑录入者输入一个整数跟一个浮点的异常处理。 (3)采用上述《猜随机数》的人机界面,用对话框来完成整个程序。 (4)(选做)是否可以一行一次性录入2或3个数,而不需要每次只录入一个数? 该程序的代码如下: packagezi; importjavax.swing.JOptionPane; publicclassEx3_8{ publicstaticvoidmain(String[]args){ Stringinput,input1,input2,input3; intn; floata,b,c; input=JOptionPane.showInputDialog("选择输入2个数还是3个数: "); n=Integer.parseInt(input); if(n==2){ input1=JOptionPane.showInputDialog("输入第一个数"); input2=JOptionPane.showInputDialog("输入第二个数"); a=Integer.parseInt(input1); b=Integer.parseInt(input2); max(a,b); } elseif(n==3){ input1=JOptionPane.showInputDialog("输入第一个数"); input2=JOptionPane.showInputDialog("输入第二个数"); input3=JOptionPane.showInputDialog("输入第三个数"); a=Integer.parseInt(input1); b=Integer.parseInt(input2); c=Integer.parseInt(input3); max(a,b,c); } elseSystem.out.print("数的个数不正确,请重新输入! ");} publicstaticvoidmax(floata,floatb) { //Stringinput1,input2; floatmax; if(a>b)max=a; elsemax=b; JOptionPane.showMessageDialog(null,a+","+b+"中的最大数是: "+max,"最大数结果",JOptionPane.PLAIN_MESSAGE); } publicstaticvoidmax(floata,floatb,floatc) { floatmax; if(a>b) if(a>c) max=a; else max=c; else if(b>c) max=b; else max=c; JOptionPane.showMessageDialog(null,a+","+b+","+c+"中的最大数是: "+max,"最大数结果",JOptionPane.PLAIN_MESSAGE); } } 输入两个数运行结果截图如下: 输入三个数的运行结果截图如下: 实验3—9、有关注解的例子: 请大家按顺序完成以下这个例子(参考他人形成的例子),具体知识请参照书本或自行检索。 (1)建立一个简单的注解例子。 新建一个注解,文件名跟注解名叫TestA,其截图如下: 接下来的注解太复杂了,编译老出错,就不截图了。 实验心得: 1、个人觉得本次实验较前两次实验难度较大,部分内容也较难理解和应用。 2、不过本次实验我也体验到用Java编译小程序的乐趣,比如说猜数游戏,找零钱等,觉得较为实用,并可用于日常生活中。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- java 实验三 控制语句 实验报告 实验 控制 语句 报告