Java网络编程实验一到四答案

实验一 开发工具和语言基础

By光绪

一、实验目的和要求

1.掌握JDK的安装、环境配置和使用;掌握JBuilder或Eclips的安装和使用。使用JDK、JBuilder或Eclips编辑、编译和运行Java程序。

2.掌握Java的语言基础。

3.掌握简单语句、标准输入输出和选择语句的编程。

二、实验内容

1.JDK 开发环境的安装配置实践

在 Windows 下,直接运行下载的 j2sdk1.4.2.exe 文件,根据安装向导安装到一个目录,例如安装到 C:\j2sdk1.4.2。

设置环境变量:如果操作系统是 Win 98/Me,可以用记事本直接编辑 Autoexec.bat,添加下面命令行:

PATH=%PATH%.c:\j2sdk1.4.2\bin

SET JAVA_HOME=c:\j2sdk1.4.2

SET CLASSPATH=..c:\j2sdk1.4.2\lib\tools.jar.c:\j2sdk1.4.2\lib\dt.jar

保存后重新启动计算机,这样所添加的环境变量才会有效。

如果操作系统是Win2000 或 xp,按如下方式配置环境变量:

右键单击"我的电脑",在弹出菜单中选择"属性"→"系统特性" →"高级" →"环境变量", 弹出环境变量对话框,就可以编辑系统的环境变量了。添加 PATH、JAVA_HOME 和 CLASSPATH 三个变量,变量值同上。

最后编写并运行一个Java 程序,使其输出:“Java 你好!”

2.JBuilder或Eclips的安装使用实践

在计算机上安装JBuilder或Eclips,然后编写并运行一个Java 程序,使其输出:“Java 你好!”

3.熟悉Java工程结构、Java程序结构及上机运行过程

1)编写一个最简单的Java程序,只输出一句话“Java 你好!”。

   要求:类名为MyJava1, 公共类(即类名前有public修饰)。程序运行通过后打开工程文件夹,观察文件夹的结构,其中的文件及其文件名称。

2)在内容窗口中修改上面程序中的类名,观察有什么反映,想一想是什么原因?

3)在内容窗口中对1)的程序进行如下修改:

将类名前的public修饰符去掉,观察有什么反映,想一想是什么原因?

4)在1)的程序最后再加一个公共类:

        public class MyJava2 {  }

观察有什么反映,想一想是什么原因?

5)在1)的程序中再加一个非公共类:

     class MyJava2 {  }

观察程序能运行否。

public class Myjava1

{

       public static void main(String args[])

       {

              System.out.println("java,你好!");

       }

}

4.熟悉标准输出语句

编写一个程序,在主方法中写入如下语句:

            System.out.println(1+2.3);

            System.out.println("abc"+"def");

            System.out.println("ab"+1);

            System.out.println("abc"+1+2.3);

            System.out.println(1+2.3+"abc");

            System.out.println(1+"abc" +2.3);

观察运行结果,想一想为什么有这样的结果。

5.分析下面的程序,它有什么错误,应如何改正?再将程序输入机器,看有什么错误,改正(仅修改初值)后运行它,观察输出的值,理解基本数据类型及基本数据类型常值的表示。

public class Test

{ public static void main(String args[])

  { byte b=0x55;

    short s=0400;

    int i=100000;

    long l=0xff;

    char c1="A";

    char c2=65;

 float f=.25;

    double d=.00001234;

    boolean bool=true;

    System.out.println("byte b="+b);

    System.out.println("short s="+s);

    System.out.println("int i="+i);

    System.out.println("long l="+l);

    System.out.println("char c1="+c1);

    System.out.println("char c2="+c2);

    System.out.println("float f="+f);

    System.out.println("double d="+d);

    System.out.println("boolean bool="+bool);

  }}

6.编写一程序,运行后从键盘输入三个整数,输出其中的最大数。(if语句)

import java.util.Scanner;

public class Test16{

       public static void main(String args[])

       {

              System.out.println("请输入三个数:");

              double a,b,c;

              Scanner scan=new Scanner(System.in);

              a=scan.nextInt();

              b=scan.nextInt();

              c=scan.nextInt();

              if(a>b) {a=a;}

              else{a=b;}

              if(a>c) {a=a;}

              else{a=c;}

              System.out.println("最大的数字是:"+a);

       }

}

7.编写一程序,将从键盘输入的一个百分制考试成绩转化为五分制输出。百分制与五分制的对应如下:    (switch语句)

100~90 — A,  89~80 — B,  79~70 — C,  69~60 — D,  <60 — E

import java.util.Scanner;

public class Test17

{

      public static void main(String args[])

      {

             System.out.println("请输入成绩:");

             Scanner scan=new Scanner(System.in);

             int grade=scan.nextInt();

             switch(grade/10)

             {

                    case 10:{System.out.println("A"); break;}

                    case 9:

                    {System.out.println("A"); break;}

                    case 8:{System.out.println("B"); break;}

                    case 7:{System.out.println("C"); break;}

                    case 6:{System.out.println("D"); break;}

                    default:{System.out.println("E"); break;}                 

             }    

      }

}


实验二 流程控制程序设计

一、实验目的和要求

掌握Java流程控制语句、Math类、数组的编程方法。

要求至少完成实验内容题的70%。

二、实验内容

1.打印一个三角形的1~9的乘法表。

public class Test21{

       public static void main(String args[])

       {

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

              for(int k=1;k<10;k++)

              {System.out.print(k+" ");}

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

              for(int i=1;i<10;i++)

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

                     for(int j=1;j<10;j++)

                 {       if(j<=i){System.out.print(i*j+" ");    }    

                 }

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

}

       }

}

2.编写一程序,将从键盘输入的每个月份数(整数)显示出其对应的英文,直至输入0结束,注意对非法数据的处理。  (while,switch语句)

import java.util.Scanner;

public class Test22{

       public static void main(String agrs[])

       {

              Scanner scan=new Scanner(System.in);

              System.out.println("请输入月份数(整数):");

              int month;

              int i=1;

              while(i<=12)

              {

                     i++;

                  month=scan.nextInt();

                     switch(month)

                 {

                     case 12:System.out.println("December!");break;

                     case 11:System.out.println("November!");break;

                     case 10:System.out.println("October!");break;

                     case 9:System.out.println("September!");break;

                     case 8:System.out.println("August!");break;

                     case 7:System.out.println("July!");break;

                     case 6:System.out.println("June!");break;

                     case 5:System.out.println("May!");break;

                     case 4:System.out.println("April!");break;

                     case 3:System.out.println("March!");break;

                     case 2:System.out.println("February!");break;

                     case 1:System.out.println("January!");break;

                     default:System.out.println("请输入合法数据!");

                  }

              };

       }

}

3.打印图案:一个由n行星花组成的三角形。如n=5时的图案为:

 

public class Test23{
public static void main(String args[])
{
for(int i=0;i<=5;i++)
{
for(int k=5;k>i;k--)
{
System.out.print(" ");
}
for(int j=0;j<i;j++)
{
System.out.print("*"+" ");
}
System.out.print("\n ");
}
}
}

4.打印出所有的“水仙花数”。所谓“水仙花数”是指一个三位数,其各位数字的立方和等于该数本身。例如153是一个“水仙花数”,因为153=13+53+33

import java.util.Scanner;

public class Test{

       public static void main(String args[])

       {

              Scanner scan=new Scanner(System.in);

              System.out.println("请输入一个整数:");

              int num=scan.nextInt();

              int i=0,sum=0,a=num;

              while(((num*10)/10)!=0)

              {

                     i=num%10;

                     num=(num-i)/10;

                     sum=sum+(i*i*i);

                     }

                     if(a==sum){

                            System.out.println(a+"是水仙花数");

                     }

                     else

                     {

                            System.out.println(a+"不是水仙花数");

                     }

       }

}

5.编写一个程序,从键盘读一个年份的数字,然后判断该年是否是闰年,如果是就输出“闰年”,如果不是就输出“非闰年”。

闰年的条件是满足以下两个条件之一:

1)能被4整除,但不能被100整除;

2)能被4整除,又能被400整除。

import java.util.Scanner;

public class Test{

       public static void main(String args[]){

               Scanner scan=new Scanner(System.in);

               System.out.println("请输入年份:");

               int year=scan.nextInt();

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

               {

                    System.out.println(year+"是闰年!");

               }

               else

               {

                    System.out.println(year+"不是闰年!");

               }

               

       }

}    

6.统计个位数是6,并且能被3整除的五位数共有多少个

public class Test{

       public static void main(String args[])

       {

              int sum=0;int test=0;int i=0;

               for(int k=10000;k<100000;k++)

               {

                    int num=k;

                    while(((num*10)/10)!=0)

                 {

                     i=num%10;

                     num=(num-i)/10;

                     test=i+test;

                     }

                    if(((i%10)==6)&&(test%3==0))

                    {

                           sum++;

                           test=0;

                    }

               }

               System.out.println("个位数是6,并且能被3整除的五位数共有"+sum+"个")

       }

}

7.编写一个程序,在其中建立一个有10个整数的数组,运行后从键盘输入10个数,然后输出其中的最小数。

import java.util.Scanner;

public class Test{

       public static void main(String args[])

       {

              int a[]=new int[10];

              int i=0;

              Scanner scan=new Scanner(System.in);

              for( i=0;i<10;i++)

              {

                     a[i]=scan.nextInt();

              }

               

               for( i=0;i<9;i++)

              {

                 if(a[i]<a[i+1])

                 {

                   a[i+1]=a[i];

                 }

                

              }

              System.out.println(a[i]);

              }

}

8.编写一个程序,在其中建立一个有10个整数的数组,运行后从键盘输入10个数,然后排序(升序)后输出。

import java.util.Scanner;

public class Test28

{

       public static void main(String args[])

       {

              int i,j,t,n=10;

              int a[]=new int[10];

              Scanner scan=new Scanner(System.in);

              System.out.println("请输入10个数字:");

              for(i=0;i<10;i++)

              {

                     a[i]=scan.nextInt();

              }

              for(j=0;j<n-1;j++)

              {

                     for(i=0;i<n-1-j;i++)

                     {

                            if(a[i]>a[i+1])

                      {

                         t=a[i];

                         a[i]=a[i+1];

                         a[i+1]=t;

                      }

                     }

                 

              }

               

              System.out.println("排序后的序列:");

              for(i=0;i<10;i++)

              {

                     System.out.print(a[i]+" ");

              }

       }

   

}

9.编写一个程序,找出5行5列整数矩阵中的最小元素,矩阵元素由键盘输入。

import java.util.Scanner;

public class Test28

{

       public static void main(String args[])

       {

              Scanner scan=new Scanner(System.in);

              int a[][]=new int[5][5];

              int i,j;

              for(i=0;i<5;i++)

                 for(j=0;j<5;j++)

                 {

                    a[i][j]=scan.nextInt();

                 }

              for(i=0;i<5;i++)

                 for(j=0;j<4;j++)

                 {

                    if(a[i][j]<a[i][j+1])

                       a[i][j+1]=a[i][j];

                 }

      

                 for(i=0;i<4;i++)

                 {

                       if(a[i][4]<a[i+1][4])

                         {a[i+1][4]=a[i][4];}

                 }

                    System.out.println("最小的数字是:"+a[4][4]);

                

               

        }

}

10.编写一个程序,计算出5行5列整数矩阵的每行之和。

import java.util.Scanner;

public class Test28

{

       public static void main(String args[])

       {

              Scanner scan=new Scanner(System.in);

              int a[][]=new int[5][5];

              int b[]={0,0,0,0,0};

              int i,j;

              for(i=0;i<5;i++)

                 for(j=0;j<5;j++)

                 {

                    a[i][j]=scan.nextInt();

                 }

              for(i=0;i<5;i++)

                 for(j=0;j<4;j++)

                 {

                    b[i]+=a[i][j];

                 }

              System.out.println("每行的和是:");

              for(i=0;i<5;i++)

                 {

                   System.out.print(b[i]+" ");

                 }

                    

                

               

        }

}

11.编写一个程序,在其中定义一个6´6的二维整型数组, 利用随机函数产生36个10~20之间的随机整数放入,然后将数组输出到屏幕上(6行6列格式)。最后计算出数组中对角线元素的平方根和。

public class Test28

{

       public static void main(String args[])

       {

             

              int a[][]=new int[6][6];

              int i,j;

              double sum=0;

              for(i=0;i<6;i++)

                 for(j=0;j<6;j++)

                 {

                    a[i][j]=(int)(10+Math.random()*(20-10+1));

                 }

              for(i=0;i<6;i++)

                {

                 for(j=0;j<6;j++)

                 {

                    System.out.print(a[i][j]+" ");

                    if(i==j)

                    {

                         sum+=Math.sqrt(a[i][j]);

                    }

                 }

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

                } 

                System.out.println("对角线平方根的和是:"+sum);

             

        }

}


实验三 面向对象程序设计

一、实验目的和要求

掌握类、对象、方法、继承、接口的编程技术;

要求至少完成实验内容题的70%。

二、实验内容

1.编一程序,求两个正整数m、n的最大公约数。

   要求程序中有两个方法,分别使用循环和递归求最大公约数,最后在主方法中分别调用这两个方法求解56与91的最大公约数。

   提示:用辗转相除法。

方法:(1) 求m除n的余数r;

         (2) 如果r为0,则n为最大公约数,结束。否则转(3);

         (3) 用n置m,用r置n ,回到(1)。

import java.util.Scanner;

public class Test

{

       public static int test1(int m,int n)

       {

              for(int r=m%n;;)

              {

                     r=m%n;

                     if(r==0)

                     {

                            return n;

                     }

                     else

                     {

                            m=n;

                            n=r;

                     }

              }

             

       }

       public static int test2(int m,int n)

       {

              if(m%n==0)

                return n;

              else

                return test2(n,m%n);

       }

       public static void main(String args[])

       {

              Scanner scan =new Scanner(System.in);

              System.out.println("请输入两个正整数:");

              int x=scan.nextInt();

              int y=scan.nextInt();

              System.out.println("循环方法:"+x+","+y+"的最大公约数是:"+test1(x,y));

              System.out.println("递归方法:"+x+","+y+"的最大公约数是:"+test2(x,y));

       }

      

}

 

2.编写一个完整的Java Application程序,其中设计一个复数类Complex,利用它验证两个复数 1+2i 和3+4i 相加产生一个新的复数 4+6i 。复数类Complex的设计必须满足如下要求:

1)Complex 的属性有:

realPart:int型,代表复数的实数部分;

maginPart:int型,代表复数的虚数部分。

2)Complex 的方法有:

Complex():构造方法,将复数的实部和虚部都置0;

Complex(int r , int i ):构造方法,形参 r 为实部的初值,i为虚部的初值。

3)Complex complexAdd(Complex a):将当前复数对象与形参复数对象相加,最后的结果仍是一个复数对象,返回给此方法的调用者。

4)String toString(): 把当前复数对象的实部、虚部组合成 a+bi 的字符串形式,其中a 和 b分别为实部和虚部的数据。

class Complex

{

       private int realPart;

       private int maginPart;

       public Complex(int r,int i)//有参的构造函数

       {

              realPart=r;

              maginPart=i;

       }

       public Complex()//无参的构造函数

       {

              realPart=0;

              maginPart=0; 

       }

       public void complexAdd(Complex a)

       {

              this.realPart+=a.realPart;

              this.maginPart+=a.maginPart;

       }

       public String toString()

       {

              return (realPart+"+"+maginPart+"i");

       }

}

public class Test

{

       public static void main(String args[])

       {

              Complex a=new Complex(1,3);

              Complex b=new Complex(3,4);

              System.out.print(a.toString()+"+"+b.toString()+"=");

              a.complexAdd(b);

              System.out.println(a.toString());

       }

}

3.编写一个包含圆类的程序,并为圆类设计几个构造方法和一般方法,在主方法中创建一个圆类对象并输出它的周长和面积。

要求:

    属性有3个:x,y,r,分别放置圆心坐标和半径;

    构造方法有2个。一个是无参的,用于设置3个属性的值都为0;另一个有参的,用于设置3个属性的值,以确定一个具体的圆。

    计算周长的方法:double zc();

计算面积的方法:double mj()。

import java.util.Scanner;

class Circle

{

       private double x;

       private double y;

       private double r;

       static double PI=3.1415926;

       public Circle(double X,double Y,double R)//有参的构造函数

       {

              x=X;y=Y;r=R;

       }

       public Circle()//无参的构造函数

       {    

           x=0;y=0;r=0;

       }

       public double zc()

       {

              return 2*PI*r;

       }

       public double mj()

       {

              return PI*r*r;

       }

}

public class Test

{

       public static void main(String args[])

       {

              Circle c=new Circle(1,1,4);

              System.out.println("圆的周长:"+c.zc()+",面积"+c.mj());

       }

}

4.编写一个程序,它含有一个圆类、圆柱类和主类。

要求:

    1)圆类参考上一题中的圆类;

    2)圆柱类:继承圆类,并加入一个属性h(高);

              构造方法(给4个属性赋值);

              计算面积的方法(double mj());

              计算体积的方法(double tj())。

       注意,要充分利用父类的方法。

3)主类:在主方法中创建圆和圆柱类的对象,然后计算并输出它们的面积及圆柱的体积。

import java.util.Scanner;

class Circle

{

       public double x;

       public double y;

       public double r;

       static double PI=3.1415926;

       public Circle(double X,double Y,double R)//有参的构造函数

       {

              x=X;y=Y;r=R;

       }

       public Circle()//无参的构造函数

       {    

           x=0;y=0;r=0;

       }

       public double zc()

       {

              return 2*PI*r;

       }

       public double mj()

       {

              return PI*r*r;

       }

      

}

class Cylinder extends Circle

{

       public double h;

       public Cylinder(int X,int Y,int R,int H)

       {

              x=X;y=Y;r=R;h=H;

       }

      

       public double tj()

       {

              return h*PI*r*r;

       }

       public double mj()

       {

              return 2*PI*r*r+r*h;

       }

}

public class Test

{

       public static void main(String args[])

       {

              Circle c=new Circle(1,1,4);

              Cylinder z=new Cylinder(1,1,4,6);

              System.out.println("圆的周长:"+c.zc()+",面积"+c.mj());

              System.out.println("圆柱的面积:"+z.mj()+",体积"+z.tj());

       }

}

5.编写一个含有5个类的程序:

      类Person:

          属性:编号、姓名、性别;

          构造方法:确定编号和姓名;

          一般方法:修改编号、姓名,获取编号、姓名。

      类Teacher:继承类Person并增加:

          属性:系别;

          构造方法:调用父类的构造方法;

          一般方法:修改、获取系别。

      类Student:继承类Person并增加:

          属性:班级;

          构造方法:调用父类的构造方法;

          一般方法:修改、获取班级属性值。

      类Classes:

          属性:班级名称,学生名单(Student类对象的数组);

          构造方法:确定班级名称;

          一般方法:建立学生名单,输出学生名单。

      类Main:

主类。主方法中创建一个班级,然后建立该班级的学生名单,最后

输出学生名单。

import java.util.Scanner;

class Person

{

       public int id;

       public String name;

       public String sex;

       public Person(int ID,String Name)

       {

              id=ID;name=Name;

       }

       public void setPerson(int ID,String Name)

       {

              id=ID;name=Name;

       }

       public int getPersonID()

       {

              return id;

       }

       public String getPersonName()

       {

              return name;

       }

}

class Teacher extends Person

{

       String type;

       public Teacher(int ID,String Name){super(ID,Name);}

       public void setType(String Type)

       {

              type=Type;

       }

       public String getTeacherType()

       {

              return type;

       }

}

class Student extends Person

{

       String classname;

       public Student(int ID,String Name){super(ID,Name);}

       public void setClassName(String ClassName)

       {

              classname=ClassName;

       }

       public String getClassName()

       {

              return classname;

       }

}

class Classes

{

       String classesname;int num=0;

       Student studentnames[]=new Student[10];

       Classes (String ClassesName){classesname=ClassesName;}

       void settable()

       {

              System.out.println("请输入学生人数:");

              Scanner scan=new Scanner(System.in);

              num=scan.nextInt();

              for(int i=0;i<num;i++)

              {

                     System.out.println("请输入第"+(i+1)+"个学生的学号和姓名:");

                     studentnames[i]=new Student(scan.nextInt(),scan.next());

              }

       }

       void gettable()

       {

              System.out.println("班级名称:"+classesname);

              System.out.println("学号 姓名");

              for(int i=0;i<num;i++)

              {

                     System.out.println(studentnames[i].id+"    "+studentnames[i].name);

              }

             

       }

}

public class Test

{

       public static void main(String args[])

       {

              Classes c=new Classes("计科一班");

              c.settable();

              c.gettable();

       }

}

     

6.请仔细阅读下面的程序,分析程序的结构和输出结果。再将程序上机运行,验证输出结果。(重点理解:抽象类、抽象方法、(匿名)内部类、匿名对象)

abstract class A{abstract String getS();}

class Test

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

 System.out.println(new A(){ String getS(){ return "抽象?匿名?";}}.getS());

}

}

输出结果:抽象?匿名?

7.请仔细阅读下面的程序,分析程序的结构和输出结果。再将程序上机运行,验证输出结果。

(重点理解:接口、接口实现方法、(匿名)内部类、匿名对象)

interface I{ String getS(); }

class Test

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

   System.out.println(new I(){ public String getS()

{ return "接口和内部类!";}}.getS());

 }

 }

输出:接口和内部类!

(请比较本程序与上题程序的不同之处)


实验四 语言基础与面向对象

一、实验目的和要求

掌握Java语言基础与面向对象的综合编程技术与方法,更全面深入地理解面向对象程序设计技术内涵。

本实验由学生自由选做,课后完成。

二、实验内容

1.请先阅读下面的程序,确定它的输出结果。再将程序上机运行,验证自己分析的输出结果是否正确。

class Yuan

{ int r; String name; static int z= 5;

  Yuan(int r){ this.r=r; }

 int a(){ return z*r*r; }

  int p(){ return 5*z*r; } 

  void value (){ name="china"; }

 }

class testOverride extends Yuan

{ int h; String name;

testOverride(int r,int h1) { super(r); h=h1; }

int a(){ value();  return 2*super.a()+p()*h; }

void value()

{ super.value();

       name="America";

       System.out.println("\""+this.name+"\"");

       System.out.println(super.name);

}

public static void main(String args[])

{ Yuan y= new Yuan(4);

       Yuan yz= new testOverride(5,2);

    System.out.println(y.a());

  System.out.println(yz.p());

   System.out.println(yz.a());       

 }

}

输出:80\125\”American”\china\500

2.请先阅读下面的程序,确定它的输出结果。再将程序上机运行,验证自己分析的输出结果是否正确。

public class TestTransOfValue

{public static void main(String args[])

 { double val;

       StringBuffer sb1, sb2;

       String sb3;

       char s[]={'a','p','p','l','e'};

       val = 5.8;

       sb1 = new StringBuffer("apples");

       sb2=new StringBuffer("pears");

       sb3 = new String("pear");

       modify(val, sb1, sb2,sb3,s);

       System.out.println(val);

       System.out.println(sb1);

       System.out.println(sb2);

       System.out.println(sb3);

       System.out.println(s);

}

public static void modify(double a, StringBuffer r1,

                                  StringBuffer r2,String r3,char s[] )

  { a = 6.8; 

    r1.append(" taste good");

    r2=null;

    r3="banana";

    s[2]='R';       }

}

5.8

apples taste good

pears

pear

apRle

Press any key to continue...

3.编写一个程序,其中设计一个矩阵类Matrix,最后计算:

 

要求Matrix类满足:

1)Matrix的属性有:

m,n:int型,矩阵的行、列数;

ma:int型两维数组,放置矩阵的数据。

2)Matrix的方法有:

Matrix (int m , int n ):构造方法,设置矩阵的行数和列数;

cheng(Matrix a):将当前矩阵与形参矩阵相乘,最后返回乘的结果(Matrix对象); void print():输出矩阵。

import java.util.Scanner;

 class Matrix {  

      public double[][] create() {

             Scanner sc = new Scanner(System.in) ;

             System.out.print("请输入矩阵的行高:");

             int a = sc.nextInt() ;

             System.out.print("请输入矩阵的列宽:");

             int b = sc.nextInt() ;

             double[][] x = new double[a][b] ;         

             for(int i=0;i<a;i++){

                    for(int j=0;j<b;j++){

                           System.out.print("请输入元素x["+i+"]["+j+"]的值:" );

                           x[i][j] = sc.nextDouble() ;

                    }

             }

             return x ;

      }

      public double[][] multiply(double[][] x,double[][] y){

             double[][] result = null ;

             int a = x[0].length ;

             int b = y.length ;

             if(a != b){

                    System.out.println("输入的维数不匹配,不能进行运算");

             }else{

                    int c = x.length ;

                    int d = y[0].length ;

                    result = new double[c][d] ;

                    for(int i=0;i<c;i++){

                           for(int j=0;j<d;j++){

                                  double sum = 0 ;

                                  for(int k=0;k<a;k++){

                                         sum += x[i][k]*y[k][j] ;

                                  }

                                  result[i][j] = sum ;

                           }

                    }

             }

             return result ;

      }

      public void print(double[][] x){

             System.out.println("相乘后的矩阵为:");

             for(int i=0;i<x.length;i++){

                    for(int j=0;j<x[i].length;j++){

                           System.out.print(x[i][j] + " ") ;

                    }

                    System.out.println();

             }

      }

}

public class Test{

      public static void main(String[] args) {

             Matrix m = new Matrix() ;

             System.out.println("创建第一个数组:") ;

             double[][] x = m.create() ;

             m.print(x) ; 

             System.out.println("创建第二个数组:");

             double[][] y = m.create() ;

             m.print(y) ;

             double[][] result = m.multiply(x, y) ;

             if(result == null){

                    return ;

             }

             m.print(result) ;

      }

}

4.请仔细阅读下面的程序,分析程序的结构和输出结果。再将程序上机运行,验证输出结果。(注意重点理解:内部类、对象内部类、静态内部类)

public class Outer

{ public Outer(){System.out.println("OuterClass Object!");}

  private class  Inner1

   { private  Inner1(String s){ System.out.println(s);} }

  static class Inner2

{ Inner2(String s){ System.out.println(s);} }

  public static void  main(String[] args)

   { Outer ob= new T();

     Outer.Inner1 ib1 = ob.new Inner1("InnerClass1 Object!");

     Inner2 ib2=new Inner2("InnerClass2 Object!");

    }

  }

OuterClass Object!

InnerClass1 Object!

InnerClass2 Object!

Press any key to continue...

请再尝试将:

Outer.Inner1 ib1 = ob.new Inner1("InnerClass1 Object!");

改为:

    ob.Inner1 ib1 = ob.new Inner1("InnerClass1 Object!");

看有什么变化。编译错误ob包不存在

5.请仔细阅读下面的程序,分析程序的结构和输出结果。由此理解接口、抽象类、继承、实现接口,进一步理解多态。

interface Food

{ public void doEat();}     // doEat()是吃食物的方法

abstract class Fruit{}      //水果抽象类

abstract class Meat{ }      //肉抽象类

class Apple extends Fruit implements Food//苹果类

{ public void doEat()

  { System.out.println("我是苹果,属于水果类,你不必烹饪我就可吃!"); }

}

class Beef extends Meat implements Food        //牛肉类

{ public void doEat()

  {System.out.println("我是牛肉,属于肉类,必须烹饪后才可吃!"); }

}

public class Use

{ public static void main(String args[])

  { Food f=new Apple();

    f.doEat();

    f=new Beef();

    f.doEat();        // 两个“f.doEat()”体现了多态

}

}

我是苹果,属于水果类,你不必烹饪我就可吃!

我是牛肉,属于肉类,必须烹饪后才可吃!

Press any key to continue...

试一试将主方法改为:

public static void main(String args[])

{  Food f=new Apple();  f.doEat();  }   

观察系统有何反应?

我是苹果,属于水果类,你不必烹饪我就可吃!

Press any key to continue...

再在Fruit类中加入方法“abstract void doEat();” ,看结果怎样,你能得出什么结论?

错误

6.设计一个程序,其中含有一个接口Shape(形状),其中有求形状的面积的方法area()。再定义三个实现接口的类:三角型类、矩形类和圆类。在主方法中创建Shape类型的一维数组,它有三个元素,放置三个对象,分别表示三角形、矩形和圆,然后利用循环输出三个图形的面积。

( 注:三角形面积s=Math.sqrt(p*(p-a)*(p-b)*(p-c)),a,b,c为三条边,p=(a+b+c)/2  )

interface Shape{

  public double area();

}

class triangle implements Shape{

       int a,b,c;

    public     triangle(int A,int B,int C){a=A;b=B;c=C;}

       public double area(){int p=p=(a+b+c)/2 ;return Math.sqrt(p*(p-a)*(p-b)*(p-c));}

}

class rectangle implements Shape{

       int a,b;

       public  rectangle(int A,int B){a=A;b=B;}

       public double area(){return a*b;}

}

class circle implements Shape{

       int r;

       public  circle(int R){r=R;}

       public double area(){return 3.14*r*r;}

}

public class Test

{

       public static void main(String args[])

       {

              Shape s[]=new Shape[3];

              s[0]=new triangle(3,4,5);

              s[1]=new rectangle(3,4);

              s[2]=new circle(3);

              System.out.println("三角形的面积是:"+(s[0].area())+";长方形的面积:"+(s[1].area())+";圆的面积:"+(s[2].area()));

             

       }

}

相关推荐