java 实验三 控制语句 实验报告.docx

上传人:b****7 文档编号:24934506 上传时间:2023-06-03 格式:DOCX 页数:27 大小:4.69MB
下载 相关 举报
java 实验三 控制语句 实验报告.docx_第1页
第1页 / 共27页
java 实验三 控制语句 实验报告.docx_第2页
第2页 / 共27页
java 实验三 控制语句 实验报告.docx_第3页
第3页 / 共27页
java 实验三 控制语句 实验报告.docx_第4页
第4页 / 共27页
java 实验三 控制语句 实验报告.docx_第5页
第5页 / 共27页
点击查看更多>>
下载资源
资源描述

java 实验三 控制语句 实验报告.docx

《java 实验三 控制语句 实验报告.docx》由会员分享,可在线阅读,更多相关《java 实验三 控制语句 实验报告.docx(27页珍藏版)》请在冰豆网上搜索。

java 实验三 控制语句 实验报告.docx

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模板 > 商务科技

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

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