java实验5

实验名称              第五次实验:类的多态性              

一、实验目的:

   理解类的多态性,掌握方法的继承、重载和覆盖掌握如何从键盘输入数据以及多重循环的使用

二、实验要求:

1. 编写体现类的多态性(成员方法重载)的程序。

2. 编写构造方法重载的程序。

3. 编写使用键盘来输入数据的程序。

4. 编写使用多重循环的程序。

 

三、实验内容:

  一)类的多态性练习

1. 理解类的多态性

类的继承发生在多个类之间,而类的多态只发生在同一个类上。在一个类中,可以定义多个同名的方法,只要确定它们的参数个数和类型不同。这种现象称为类的多态。

多态使程序简洁,为程序员带来很大便利。在OOP 中,当程序要实现多个相近的功能时,就给相应的方法起一个共同的名字,用不同的参数代表不同的功能。这样,在使用方法时不论传递什么参数,只要能被程序识别就可以得到确定的结果。

类的多态性体现在方法的重载(overload)上,包括成员方法和构造方法的重载。

2. 方法的重载

方法的重载是指对同名方法的不同使用方式。

1) 程序功能:对不同的数进行排序输出。在IntSort 类中定义2 个同名的方法sort。

2) 编写KY5_1.java 文件,源代码如下。

class IntSort {

public String sort (int a, int b) {

if (a>b)

return a+" "+b;

else

return b+" "+a;

}

public String sort (int a, int b, int c) {   

int swap;

if (a<b) {

swap=a;

a=b;

b=swap;

}

if (a<c) {

swap=a;

a=c;

c=swap;

}

if (b<c) {

swap=b;

b=c;

c=swap;

}

return a+" "+b+" "+c;

}

}

 

public class KY5_1 {

public static void main(String args[])  

         {

int a=30, b=12, c=40;

IntSort s=new IntSort();

System.out.println("两个数的排序结果:"+s.sort(a,b));

System.out.println("三个数的排序结果:"+s.sort(a,b,c));

}

}

3) 编译KY5_1.java并运行程序

4) 将程序的输出结果记录在实验报告中。

 

5) 请在实验报告中说明在IntSort 类中出现的下面两个同名的方法各自的功能?

I. public String sort (int a, int b)  

II. public String sort (int a, int b, int c)

两个是同名重载函数,以设置的变量不同来得以区分。

1的功能为排序两个数。

2的功能为排序三个数。

6) 请在实验报告中指出程序中是哪条语句调用了方法I,哪条语句调用了方法II?

  System.out.println("两个数的排序结果:"+s.sort(a,b));     这条语句调用了方法一。

  System.out.println("三个数的排序结果:"+s.sort(a,b,c));    这条语句调用了方法二。

(二)构造方法的重载

构造方法的名称和类同名,没有返回类型。尽管构造方法看起来和一般的成员方法没有差别,但它不是方法,也不是类的成员。因此,构造方法不能直接调用,只能由new 操作符调用。

构造方法对于类是十分重要的,对象的初始化任务要靠构造方法来完成。重载构造方法的目的是提供多种初始化对象的能力,使程序员可以根据实际需要选用合适的构造方法来初始化对象。

1) 编写程序KY5_2.java,将其中的类RunDemo的构造方法进行重载。源代码如下。

class RunDemo {

private String userName, password;

RunDemo(String name) {

userName=name;

}

RunDemo(String name, String pwd) {

this(name);

password=pwd;

}

void check() {   //检验用户名和密码

String s=null;

if (userName!=null)

s="用户名:"+userName;

else

s="用户名不能为空!";

if (password!="123456")

s=s+" 口令无效!";

else

s=s+" 口令:******";

System.out.println(s);

}

}

 

public class KY5_2 {

public static void main(String[] args) {

RunDemo r1=new RunDemo("刘新宇");

r1.check();

RunDemo r2=new RunDemo(null, "654321");

r2.check();

RunDemo r3=new RunDemo("张驰","123456");

r3.check();

}

}

 

2) 编译程序KY5_2.java并运行程序


3) 将程序的输出结果记录在实验报告中。

4) 指出程序中的下面三条语句分别调用了类RunDemo中的哪个构造方法?

I. new RunDemo("刘新宇");

RunDemo(String name)调用这个构造方法。

II. new RunDemo(null, "654321");

RunDemo(String name,String pwd )调用这个构造方法。

III. new RunDemo("张驰","12345678");

RunDemo(String name,String pwd )调用这个构造方法。

5) RunDemo中有两个构造方法,其中第一个构造方法RunDemo(String) 只有一个参数,用来对成员变量userName 赋初值。第二个构造方法RunDemo(String, String) 有两个参数,并有更多的内容,首先调用this(name),其实际作用就是调用当前类的构造方法RunDemo(String name);然后对成员变量password 赋值;最后调用check 方法来检查userName 和password,类似于一般程序的口令验证。重载构造方法的执行由对象根据实际参数的个数、类型和顺序确定。

(三)使用键盘输入

1. 程序功能:运行程序后,从键盘输入数字 1、2或者3 ,可显示抽奖得到的奖品;如果输入其它数字或字符则显示“对不起,没有奖品给你!”。

2. 程序源代码如下。

      import java.io.*;

      class KY5_3 {

          public static void main(String args[]) throws IOException {

            char ch;

            System.out.println("抽奖游戏,祝您好运!");

            System.out.println("按 1、2、3 数字键后回车,可得大奖!");

            System.out.println("按空格键后回车,可退出本游戏.");

            while ((ch=(char)System.in.read())!=' ')

            {

               System.in.skip(2);     // 跳过回车键

               switch (ch) {

               case '1':

                 System.out.println("恭喜您得大奖,一辆汽车!");

                 break;

               case '2':

                 System.out.println("不错呀,您得到一台笔记本电脑!");

                 break;

               case '3':

                 System.out.println("没有白来,您得到一台冰箱!");

                 break;

               default:

                 System.out.println("对不起,没有奖品给您!欢迎下次光临。");

             }

          }  

        }

       }

 

3.编译并运行 KY5_3.java


  4.运行程序,从键盘输入一下数字或字符,看看程序的输出结果是什么?把这些结果写在实验报告中。

(四) 使用多重循环语句

    1.请编写程序 KY5_4.java,要求程序能够输出九九乘法表。

2.程序源代码如下。

public class KY5_4

     {

       public static void main(String args[])

       {

          int i, j, n=9;

          System.out.print("      *   |");

          for (i=1; i<=n; i++)  { System.out.print("    "+i);  }   //第一个for循环

          System.out.print("\n----------|");

          for (i=1; i<=n; i++)  { System.out.print("-----");  }     //第二个for循环 

          System.out.println();

          for (i=1; i<=n; i++)                               //第三个for循环

          {

              System.out.print("     "+i+"    |");

              for (j=1; j<=i; j++)  { System.out.print("   "+i*j);  }   //第四个for循环 

              System.out.println();

          }

       }

 }

 

3.编译并运行 KY5_4.java      

4.请将程序的运行结果写在实验报告中,并且说明程序中每一个for循环的作用。

   

   答:第一个for循环的作用是:输出1-9输出一行。

       第二个for循环的作用是:输出9个-----,输出一行。

       第三个for循环的作用是:输出     +i+    |,每输出一个换行。

       第四个for循环的作用是:输出9*9的乘法口诀。

   结果:

         *   |    1    2    3    4    5    6    7    8    9

----------|---------------------------------------------

     1    |   1

     2    |   2   4

     3    |   3   6   9

     4    |   4   8   12   16

     5    |   5   10   15   20   25

     6    |   6   12   18   24   30   36

     7    |   7   14   21   28   35   42   49

     8    |   8   16   24   32   40   48   56   64

     9    |   9   18   27   36   45   54   63   72   81


 

 

 

Java程序设计》课程实验指导书程序代码(答案)(实验五:Java的异常处理),个人原创,仅供参考与交流。 希望多多交流,共同进步! 实验Java的异常处理 一、实验目的: 理解 java 语言中独特的异常处理机制; 掌握异常处理方法; 正确地使用捕获异常和声明抛弃异常的两种异常处理的方法; 了解自定义异常类的使用; 理解抛出异常和声明抛出异常的区别与联系; 二、实验内容: 1. 从命令行得到5个整数,放入一整型数组,然后打印输出,要求:如果输入数据不为整数,要捕获Integer.parseInt()产生的异常,显示“请输入整数”,捕获输入参数不足5个的异常(数组越界),显示“请输入至少5个整数”。 2.写一个方法void sanjiao(int a,int b,int c),判断三个参数是否能构成一个三角形,如果不能则抛出异常IllegalArgumentException,显示异常信息a,b,c+”不能构成三角形”,如果可以构成则显示三角形三个边长,在主方法中得到命令行输入的三个整数,调用此方法,并捕获异常。 3.自定义类Sanj,其中有成员 x,y,z,作为三边长,构造方法Sanj(a,b,c)分别给x,y,z赋值,方法求面积getArea和显示三角形信息(三个边长)showInfo,这2个方法中当三条边不能构成一个三角形时要抛出自定义异常NotSanjiaoException,否则显示正确信息。在另外一个类中的主方法中构造一个Sanj对象(三边为命令行输入的三个整数),显示三角形信息和面积,要求捕获异常。 三、实验要求: 1. 通过实验掌握捕获异常和声明抛弃异常的两种异常处理的方法; 2. 程序必须能够捕获Integer.parseInt()产生的异常并作相应的处理; 3. 程序必须能够将处理的相应的信息输出出来; 4. 写出实验报告。要求记录编译和执行Java程序当中的系统错误信息提材示,并给出解决办法。(附运行界面、源代码)。 四、实验步骤: 1. (第1题) 使用try…..catch…. finally语句对Integer.parseInt()产生的异常进行捕获处理; 2. (第2题) 定义方法void sanjiao(int a,int b,int c)中,不符合条件则抛出异常(if a+b<=c(或a+c<=b,b+c<=a) then throw new IllegalArgumentException(),),再定义main方法,调用此方法,用try…..catch…. finally语句并捕获异常; 3. (第3题) 定义三角形类及相应的方法, 在定义的方法中对不符合条件则抛出异常(如上题) ,再定义main方法,对正确的数据输出正确信息,否则捕获异常; 五、自做实验 1.参考下面的程序,试修改程序,捕获相关异常,使得程序能正常运行。[提示:用错误数据测试,即可得到异常类名,运行时主方法参数输入 abc 测试] public class StringIndexOutOf{ public static void main(String args[]){ System.out.println("字符串索引越界异常"); String str=args[0]; System.out.println(“第四个字符为 ”+str.charAt(3)); int aa=Integer.parseInt(args[0]); System.out.println(“平方为 ”+aa*aa); } }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ifHappyEveryDay@

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值