《Java程序设计》上机实验(20xx调整)

时间:2024.4.30

的班级号_学号_姓名_题号.java(多文件应压缩为rar):

实验1: 熟悉上机环境,编写并运行简单的java程序(3学时) 实验目的

(1) 熟悉Java程序开发环境J2SDK+JCreator的安装及使用

(2) 熟悉Java Application和Applet程序的结构及开发步骤

(3) 熟练掌握if语句的使用

(4) 掌握Math.sqrt()等常用数学函数的用法

(5) 熟悉System.out.print()的用法

实验内容及要求

按Java Application和Applet两种方式分别编写程序,求一元二次方程ax2+bx+c=0的根(系数在程序中给定),并输出。

思考并验证

(1) 分别给定以下几组系数,给出输出结果

a=1,b=5, c=3

a=4, b=4, c=1

a=2, b=3, c=2: (2) 如果程序的public类的类名和源文件的文件名不一样会有什么问题?

(3) 将类的public修饰去掉是否可行?接着再将类名换为其它是否可行?这说明了什么?

(4) 将程序中main前面的public去掉,重新编译执行你的程序,你看到了什么信息?

(5) 将程序中main前面的static去掉,重新编译执行你的程序,你看到了什么信息?为什么?

(6) 本次上机中,你还遇到了什么问题,是如何解决的?

第1页

班级号_学号_姓名_题号.java(多文件应压缩为rar):

实验2:控制流程1(3学时)

实验目的

(1) 进一步熟悉使用if语句

(2) 掌握循环语句实现循环的方法

实验内容及要求

输出时,只使用下面的语句:

System.out.print(“ ”); //输出一个空格,并且不换行 System.out.print(“*”); //输出一个字符’*’,并且不换行 System.out.print(“+”); //输出一个字符’+’,并且不换行 System.out.println(“*”;) //输出一个字符’*’,并换行 编写程序输出(注:在图形的中心处有一个加号’+’):

*

* * *

* * * * *

* * * + * * *

* * * * *

* * *

*

思考并验证

下面程序片段给出了从键盘输入一个整数的方法:

import java.io.*;

InputStreamReader ir;

BufferedReader in;

ir=new InputStreamReader(System.in);

in=new BufferedReader (ir);

try {String s=in.readLine();

int i=Integer.parseInt(s);//转换成整形

}

第2页

catch(IOException e){}

(1) 如何修改程序,使得输出的图形可以很方便的在水平方向上移动?

(2) 如何修改你的程序,按输入行数n(为奇数)输出图形?

选做:编程求支付方法的种数:取1元,2元,5元纸币10张,付给18元,有

几种办法?

第3页

班级号_学号_姓名_题号.java(多文件应压缩为rar):

实验3:控制流程2(3学时)

实验目的

(1) 掌握数据类型的含义

(2) 掌握break语句的使用

(3) 掌握用三种循环语句实现循环以及循环嵌套的方法

实验内容及要求

编程,计算11+22+33+……+66

思考并验证

(1) 将内层循环改为另一种循环语句,比较哪种循环语句更适用于本程序?

(2) 修改程序使之计算11+22+33+……+2020,你的程序能得出正确结果吗?若

不能,应如何修改?

第4页

(3) 考虑如何通过使用break语句修改这个程序,求出最大值n,使得11+22

+…+nn小于等于long数据类型所能表示的最大值(即Long.MAX_VALUE),并给出11+22+…+nn的确切值。

选做:求有几组和为1000的连续正整数,并输出这些整数。

第5页

班级号_学号_姓名_题号.java(多文件应压缩为rar):

实验4: 类和对象(数组)(3学时)

实验目的

(1) 掌握Java语言中类和对象的基本概念

(2) 掌握Java程序设计中类和对象的定义及使用

(3) 学习使用数组,掌握数组的初始化方法及数组元素的引用

实验内容及要求

编程,求解和为15的棋盘游戏问题。要求将从1到9的九个数填入3×3的棋盘中,使得各行、各列以及两个对角线上的三个数之和均为15,并打印出结果。如左图。

思考并验证

(1) 在程序中,你用到了数组了吗,使用的是几维数组?如果没有使用,在程序

中该如何使用数组?它给编程带来了什么好处?

(2) 编程思路:

(3) 在程序中,你定义了哪些类,它们分别具有什么含义?

(4) 在程序中,你是否生成了自己定义类的对象?如果要求不可以生成类的对象

实例,程序应如何修改?

Java程序设计上机实验20xx调整

第6页

班级号_学号_姓名_题号.java(多文件应压缩为rar):

实验5: 继承、多态(接口和包)(3学时)

实验目的

(1) 掌握Java语言中继承和多态的相关概念

(2) 掌握Java程序设计中继承和多态机制的使用

(3) 掌握Java语言中接口和包的概念及使用

实验内容及要求

仿真农场

一个哺乳动物类如下所示:

public class Mammal{

protected int age = 2;

protected int weight = 5;

public Mammal(){

System.out.println(“Mammal constructor”);

}

int getAge(){return age;}

void setAge(int a){age = a;}

int getWeight(){return weight;}

void setWeight(int w){weight = w;}

void move(){System.out.println(“Mammal move one step”);}

void speak(){System.out.println(“Mammal speak!”);}

void sleep(){System.out.println(“shhh, I’m sleeping.”);}

}

狗属哺乳动物,且它的属性有品种之分(在哺乳类基础上增加品种数据成员),叫声区别于其他动物(输出“Woof!”),还会摇尾巴(增加成员函数,输出“Tail wagging…”),乞讨食物(增加成员函数,输出“begging for food…”)。

猫、马、猪也属于哺乳动物,其叫声分别为:“Meow!”,“Winnie!”,“Oink!”。 编程分别使各个动物表现为不一样的行为。要求将所有的动物类放置于animal.mammal包下。

定义两个新的类,表示宠物猫和宠物狗。要求:这两个类能输出宠物所属的主人,价格等信息;将这两个类放置于animal.mammal.pet包下。

第7页

思考并验证

(1) 在程序中的哪些地方使用到了多态的机制?多态性为我们带来了什么好处?

(2) 试着把源文件放到另外一个目录下,然后编译,看看会得到什么信息?为什么会出现这种情况?

(3) 在定义宠物类的时候,是否使用了接口?如果没有使用,该定义一个什么接口,并如何修改程序?接口的使用为程序带来了什么好处?

第8页

班级号_学号_姓名_题号.java(多文件应压缩为rar):

实验6: 异常处理(3学时)

实验目的

(1) 理解异常的概念

(2) 掌握Java程序设计中异常的处理机制

实验内容及要求

一、输入以下代码,编译调试并分析执行结果

程序1:编写用于演示异常处理机制的try-catch代码,用于测试 ArrayIndexOutOfBoundsException异常,请调试: Public class CatchException

{

public static void main(String[] args)

{

int [] arr=new int[10];

try

{

arr[10]=10;

}

catch(ArrayIndexOutOfBoundsException e)

{

e=new ArrayIndexoutBoundsException(“数组下标越界!”); throw e;

}

}

}

输入以上代码,并编译和调试,最后分析结果。

第9页

程序2:编写用于演示异常处理机制try-catch-finally的代码。在此程序中,当一个数字除以0时,将引发ArithmeticException异常,引发的异常被catch捕获。 Class Program2

{

String name=”内蒙古大学软件学院”

Int no1=10;

Int no2=20;

Program2()

{

try

{

System.out.println(name);

System.out.println(“相除结果为:”+no1/no2);

}

catch(ArithmeticException I)

{

System.out.println(“不能除以0!”);

}

finally

{

name=null;

system.out.println(“Finally 已执行!”);

}

}

public static void main(String args[])

第10页

{

new Program2();

}

}

二、.编写一个程序,用于将来自用户的两个数字接受为命令行参数。将第一个数字除以第二个数字并显示结果,处理可能的异常提示:使用两个catch语句,一个用于捕获ArrayIndexOutOfBoundsException异常(从命令行传来的参数个数不对),而另一个用于捕获ArithmaticException异常。

选做:编写一个程序,用于根据用户输入的命令行参数数量来计算长方形、正方形、三角形的面积。如果输入的参数为一个、二个、三个则它们应分别对应正方形、长方形、三角形,如果没有参数,则通过异常处理方法现实错误消息。(用于计算面积的方法是一个重载的方法)。提示:定义一个抽象的父类,并提供一个抽象的方法area(). 再派生出三个子类,重写area()方法,然后在main方法中编写测试逻辑。

第11页

班级号_学号_姓名_题号.java(多文件应压缩为rar):

实验7: 输入/输出(3学时)

实验目的

(1) 了解流类及相关的包

(2) 掌握常用的流类及其成员函数的使用方法

(3) 学习输入/输出的基本方式

(4) 巩固常用组件的使用及其事件的处理方式

实验内容及要求

建立一个班级下拉式列表,列表项中有2004(1)班,2004(2)班,2004(3)班和2004(4)班。当点击某个选项时,将其成绩单显示在文本区中。

思考并验证

(1) 抓取程序运行的一个界面:

(2) 你的程序涉及到的文件有:

(3) 你是通过什么途径建立这些文件的?

(4) 能否用word建立这些文件?

第12页

班级号_学号_姓名_题号.java(多文件应压缩为rar):

实验8: 界面布局(3学时)

实验目的

(1) 熟练运用标签、按钮、文本框等基本组件,掌握按钮等组件的事件处理方法

(2) 熟悉JTextArea的用法

(3) 熟悉下拉列表框的用法

实验内容及要求

创建一个GUI应用程序,用于转换若干种货币。提供给用户一个JTextArea以用于输入数量。同时还应提供给用户一种选择源货币名称和目的货币名称的途径。同时为自己的测试设置至少三种不同的货币名称及转换汇率。

思考并验证

(1) 画出程序运行效果图:

第13页

班级号_学号_姓名_题号.java(多文件应压缩为rar):

实验9: Applet(3学时)

实验目的

(1) 掌握Java Applet程序的结构和运行机制

(2) 掌握Java Applet程序的生命周期中触发的各种事件

(3) 复习Java语言中类的继承与方法的重载机制

实验内容及要求

编写一个Applet程序,在窗体中分别绘制由’*’组成的正方形和圆,尽量保证’*’号之间的间距相等。如下图所示:

* * * * * *

* * * * * *

* * * * * *

* * * * * *

* * * * * *

思考并验证

(1) 思考一个方法,验证Applet程序运行的生命周期中init、start、stop、destroy、

paint几个方法被调用的时机。实现这个方法,并给出验证的结果。

(2) 思路:

(3) 谈一谈自己对Java Application程序与Applet程序之间区别的一些认识和看

法。

第14页

班级号_学号_姓名_题号.java(多文件应压缩为rar):

实验10: 线程(6学时)

实验目的

(1) 掌握多线程的概念与基本操作方法

(2) 掌握线程的并发控制技术

(3) 掌握线程同步技术

实验内容及要求

一、编写程序创建5个线程,分别显示5个不同的字符串。分别用继承Thread

类以及实现Runnable接口的两种方式实现。

二、编写生产者/消费者模式的程序。生产者每隔100ms产生一个0~9之间的一个数,保存在一个MyNumber类型的对象中,并显示出来。只要这个MyNumber对象中保存了新的数字,消费者就将其取出来显示。试定义MyNumber类,编写消费者、生产者程序,并编写主程序创建一个MyNumber对象,一个生产者线程、一个消费者线程并将这两个线程启动。

第15页

班级号_学号_姓名_题号.java(多文件应压缩为rar):

实验11: Java网络程序设计(6学时)

实验目的

(1) 掌握网络通信的基础知识及Java对网络通信的支持

(2) 掌握Java基于URL的3W资源访问技术

(3) 掌握基于底层Scoket的有连接和无连接的网络通信方法

实验内容及要求

一、编写Applet显示或播放指定URL的图像和声音文件。

二、编写一个客户/服务器程序,服务器的功能是计算圆的面积。客户端将圆的半径发送给服务器端,服务器端计算得出的圆面积发送给客户端,并在客户端显示。

第16页

班级号_学号_姓名_题号.java(多文件应压缩为rar):

实验12: 小综合(6学时)

实验目的

(4) 学习布局的应用

(5) 巩固标签、文本框、按钮等图形界面组件的使用,巩固组件的事件处理方法。

(6) 提高语言成分的综合运用能力

(7) 文件的简单使用

(8) 对“算法及分析”有一个初步认识

实验内容及要求

用“筛选法”求2~n以内的所有素数:先去掉2的倍数,再去掉3的倍数,再去掉4的倍数,…,依此类推,最后剩下的就是素数。试按GUI方式图示化求解过程。

思考并验证

(1) 画出程序运行效果图:

(2) 使用的布局是:

(3) 本程序还可选用那些布局?

(4) 程序中用到了那些容器?

第17页

(5) 按另一种方式求2~n以内的所有素数。在你的方法中,为提高程序的执行效率,你采取了哪些优化措施?

(6) 修改程序,设法对循环进行计数。若n为1000,试对这两种求素数的方法在“时、空”两方面加以比较,你有什么感想?最后修改程序将所得素数存入文件中。

第18页


第二篇:《Java程序设计》上机实验 (2)


班级号_学号_姓名_题号.java(多文件应压缩为rar):

实验1: 熟悉上机环境,编写并运行简单的java程序(3学时)

实验目的

(1)   熟悉Java程序开发环境

(2)   熟悉Java Application和Applet程序的结构及开发步骤

(3)   熟练掌握if语句的使用

(4)   掌握Math.sqrt()等常用数学函数的用法

(5)   熟悉System.out.print()的用法

实验内容及要求

按Java Application和Applet两种方式分别编写程序,求一元二次方程ax2+bx+c=0的根(系数在程序中给定),并输出。

1

publicclass wyy

{

   publicstaticvoid main (String[] w)

   {

       float a=1,b=5,c=3,d=0,t=0;

       float k=0,j=0;

       k=b*b-4*a*c;

       j=(float)Math.sqrt((float)k);

       d=(-b+j)/4*a*c;

       t=(-b-j)/4*a*c;

       if(k<0)

           System.out.println("无根!");

           elseif(k>0)

           {

               System.out.println("第一个根为:"+d);

               System.out.println("第二个根为:"+t);

           }

           elseif(k==0)

               System.out.println("有一个根"+d);           

   }

}

2、import java.awt.*;

import java.applet.*;

publicclass wyy1 extends Applet

{  

   publicvoid paint (Graphics g)

   {

       float a=1,b=5,c=3,d=0,t=0;

       float k=0,j=0;

       k=b*b-4*a*c;

       j=(float)Math.sqrt((float)k);

       d=(-b+j)/4*a*c;

       t=(-b-j)/4*a*c;

       if(k<0)

           g.drawString("无根!",50,50);

           elseif(k>0)

           {

               g.drawString("第一个根为:"+d,50,50);

               g.drawString("第二个根为:"+t,50,100);

           }

           elseif(k==0)

               g.drawString("有一个根"+d,50,50);  

   }

}

3、//import java.io.*;

/*一元二次方程求解其根*/

import java.util.*;

public class wyy

{

   public static void main (String[] w)

   {

    Scanner r=new Scanner(System.in); 

       float a,b,c,d=0,t=0;

       float k=0,j=0,h,f,s;

       System.out.println("请输入a:");//Scanner 输入a的值

       a=(int)r.nextInt();

       System.out.println("请输入b:");//Scanner 输入b的值

       b=(int)r.nextInt();

       System.out.println("请输入c:");//Scanner 输入c的值

       c=(int)r.nextInt();

       System.out.println("方程式为:"+a+"x^2+"+b+"x+"+c);//显示方程式

       /*求根*/

       k=b*b-4*a*c;

       j=(float)Math.sqrt((float)k);

       d=(-b+j)/2*a;

       t=(-b-j)/2*a;

       if(k<0)//求复根

       {

       k=4*a*c-b*b;

       j=(float)Math.sqrt((float)k);

       h=(int)(j/2*a);

       f=-b/2*a;

       s=-h;

       System.out.println("有两个复根,这两个复根为:");

       System.out.println("第一个根为:x1="+h+"i"+f);

       System.out.println("第二个根为:x2="+s+"i"+f);

       }

          else if(k>0)//求实根

          {

              System.out.println("有两个实根,这两个实根为:");

              System.out.println("第一个根为:x1="+d);

              System.out.println("第二个根为:x2="+t);

          }

          else if(k==0)

          {

              System.out.println("有两个相同实根,这个实根为:");

              System.out.println("有一个根:x="+d); 

          }

   }

}

思考并验证

(1)   分别给定以下几组系数,给出输出结果
 a=1,b=5,  c=3
 a=4,  b=4,   c=1

a=2,  b=3,   c=2:       +       i            +       i

(2)   如果程序的public类的类名和源文件的文件名不一样会有什么问题?

(3)   将类的public修饰去掉是否可行?接着再将类名换为其它是否可行?这说明了什么?不可以

(4)   将程序中main前面的public去掉,重新编译执行你的程序,你看到了什么信息?main method not public

(5)   将程序中main前面的static去掉,重新编译执行你的程序,你看到了什么信息?为什么?Fatal exception occurred. Program will exit.

(6)   本次上机中,你还遇到了什么问题,是如何解决的?

班级号_学号_姓名_题号.java(多文件应压缩为rar):

实验2:控制流程1(3学时)

实验目的

(1)   进一步熟悉使用if语句

(2)   掌握循环语句实现循环的方法

实验内容及要求

输出时,只使用下面的语句:

System.out.print(“ ”);            //输出一个空格,并且不换行

System.out.print(“*”);          //输出一个字符’*’,并且不换行

System.out.print(“+”);          //输出一个字符’+’,并且不换行

System.out.println(“*”;)        //输出一个字符’*’,并换行

编写程序输出(注:在图形的中心处有一个加号’+’):

*

* * *

* * * * *

* * * + * * *

* * * * *

* * *

*

publicclass 图形

  publicstaticvoid main(String[ ] args) 

  {

    int i,j,k; 

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

  {for(j=0;j<=2-i;j++) 

   System.out.print(" "); 

    for(k=0;k<=2*i;k++)    

    System.out.print("*");    

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

   } 

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

      {

      if(i<3)

           System.out.print("*");

      if(i==3)

           System.out.print("+");

      if(i>3)

           System.out.print("*"); 

      }

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

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

  {for(j=0;j<=i;j++) 

      System.out.print(" "); 

   for(k=0;k<=4-2*i;k++) 

       System.out.print("*"); 

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

   }  

  }

}

思考并验证

下面程序片段给出了从键盘输入一个整数的方法:

import java.io.*;

InputStreamReader ir;

BufferedReader in;

ir=new InputStreamReader(System.in);

in=new BufferedReader (ir);

try {String s=in.readLine();

int i=Integer.parseInt(s);//转换成整形

}

catch(IOException e){}

(1)     如何修改程序,使得输出的图形可以很方便的在水平方向上移动?

import java.util.*;

publicclass wyy1

  publicstaticvoid main(String[ ] args) 

  {

     Scanner r=new Scanner(System.in);

    int i,j,k,a,b; 

    System.out.print("请输入平移量a:");

    a=r.nextInt();

    //System.out.print("请输入行数b:");

    //b=r.nextInt();

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

  {for(j=0;j<=2-i+a;j++) 

   System.out.print(" "); 

    for(k=0;k<=2*i;k++) 

    System.out.print("*");    

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

   } 

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

       System.out.print(" ");

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

      {

      if(i<3)

          System.out.print("*");

      if(i==3)

          System.out.print("+");

      if(i>3)

          System.out.print("*"); 

      }

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

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

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

      System.out.print(" "); 

   for(k=0;k<=4-2*i;k++) 

       System.out.print("*"); 

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

   }  

  }

}

(2)     如何修改你的程序,按输入行数n(为奇数)输出图形?

import java.util.*;

publicclass wyy1

  publicstaticvoid main(String[ ] args) 

  {

     Scanner r=new Scanner(System.in);

    int i,j,k,a,b; 

    System.out.print("请输入平移量a:");

    a=r.nextInt();

    System.out.print("请输入行数b:");

    b=r.nextInt();

 for(i=0;i<=b/2-1;i++) 

  {for(j=0;j<=b/2-1-i+a;j++) 

   System.out.print(" "); 

    for(k=0;k<=2*i;k++) 

    System.out.print("*");    

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

   } 

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

       System.out.print(" ");

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

      {

      if(i<b/2)

          System.out.print("*");

      if(i==b/2)

          System.out.print("+");

      if(i>b/2)

          System.out.print("*"); 

      }

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

 for(i=0;i<=b/2-1;i++) 

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

      System.out.print(" "); 

   for(k=0;k<=b-3-2*i;k++) 

       System.out.print("*"); 

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

   } 

  }

}

选作:编程求支付方法的种数:取1元,2元,5元纸币10张,付给18元,有几种办法?

import java.util.*;

Scanner r=new Scanner(System.in);

r.nextInt(); r.nextDouble();

(C++版)

#include<iostream.h>

int main()

{

  int x,y,z,counter=0;

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

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

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

                {

                if((x+y+z)<=10&&(5*x+2*y+z)==18)

                       counter++;

                }

                cout<<counter<<endl;

              return 0;

}

publicclass wyy

  publicstaticvoid main(String[ ] args) 

  {

      int x,y,z,counter=0;

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

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

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

             {

             if((x+y+z)<=10&&(5*x+2*y+z)==18)

                counter++;

             }

             System.out.println("回文数共有:"+counter+"个!");

  }

}

班级号_学号_姓名_题号.java(多文件应压缩为rar):

实验3:控制流程2(3学时)

实验目的

(1)     掌握数据类型的含义

(2)     掌握break语句的使用

(3)     掌握用三种循环语句实现循环以及循环嵌套的方法

实验内容及要求

编程,计算11+22+33+……+66

import java.util.*;

//import java.awt.*;

publicclass wyy1

{

   

    publicstaticvoid main(String[ ] args) 

      {

        Scanner r=new Scanner(System.in);

        double sum=0,h=0,n;

         System.out.println("请输入n:");//Scanner 输入a的值

           n=r.nextInt();

        for(int i=1,j=1;i<=n;i++,j++)

        {

            h=(double)Math.pow( i,j);

            sum=sum+h; 

        }

        System.out.println("sum="+sum);

     

      }

}

思考并验证

(1)     将内层循环改为另一种循环语句,比较哪种循环语句更适用于本程序?

(2)     修改程序使之计算11+22+33+……+2020,你的程序能得出正确结果吗?若不能,应如何修改?

import java.util.*;

//import java.awt.*;

publicclass wyy2

{

   

    publicstaticvoid main(String[ ] args) 

      {

        Scanner r=new Scanner(System.in);

        double sum=0,h=1,n;

         System.out.println("请输入n:");//Scanner 输入a的值

           n=r.nextInt();

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

        {   

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

            h=h*i;

            sum=sum+h;

            h=1;

        }

        System.out.println("sum="+sum);

          }

}

(3)     考虑如何通过使用break语句修改这个程序,求出最大值n,使得1122…+nn小于等于long数据类型所能表示的最大值(即Long.MAX_VALUE),并给出1122…+nn的确切值。

import java.util.*;

//import java.awt.*;

public class b

{

      

       public static void main(String[ ] args) 

         {

              //Scanner r=new Scanner(System.in);

              double sum=0,h=1,n=0;

              // System.out.println("请输入n:");//Scanner 输入a的值

                 //n=r.nextInt();

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

              {   

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

                     h=h*i;

                     sum=sum+h;

                     h=1;

                     if((sum-Long.MAX_VALUE)<0)

                            n++;

                     else break;

              }

              System.out.println("sum="+(n+1));

               }

}

选作:求有几组和为1000的连续正整数,并输出这些整数。

加一实验,进行递归程序设计,并用迭代进行改写。思考递归与迭代的关系。


班级号_学号_姓名_题号.java(多文件应压缩为rar):

实验4 继承、多态(接口和包)(3学时)

实验目的

(1)     掌握Java语言中继承和多态的相关概念

(2)     掌握Java程序设计中继承和多态机制的使用

(3)     掌握Java语言中接口和包的概念及使用

实验内容及要求

仿真农场

一个哺乳动物类如下所示:

public class Mammal{

protected int age = 2;

protected int weight = 5;

                   public Mammal(){

System.out.println(“Mammal constructor”);

}

int getAge(){return age;}

void setAge(int a){age = a;}

int getWeight(){return weight;}

void setWeight(int w){weight = w;}

void move(){System.out.println(“Mammal move one step”);}

void speak(){System.out.println(“Mammal speak!”);}

void sleep(){System.out.println(“shhh, I’m sleeping.”);}

}

狗属哺乳动物,且它的属性有品种之分(在哺乳类基础上增加品种数据成员),叫声区别于其他动物(输出“Woof!”),还会摇尾巴(增加成员函数,输出“Tail wagging…”),乞讨食物(增加成员函数,输出“begging for food…”)。

猫、马、猪也属于哺乳动物,其叫声分别为:“Meow!”,“Winnie!”,“Oink!”。

编程分别使各个动物表现为不一样的行为。要求将所有的动物类放置于animal.mammal包下。

定义两个新的类,表示宠物猫和宠物狗。要求:这两个类能输出宠物所属的主人,价格等信息;将这两个类放置于animal.mammal.pet包下。

package animal.mammal;

import java.lang.*;

publicclass Mammal {

    protectedint age = 2;

    protectedint weight = 5;

   

    String dog="dog";

    String pig="pig";

    String cat="cat";

    String horse="horse";

              public Mammal(){

    System.out.println("Mammal constructor");

    }

    int getAge(){return age;}

    void setAge(int a){age = a;}

    int getWeight(){return weight;}

    void setWeight(int w){weight = w;}

    void move(){System.out.println("Mammal move one step");}

    void speak(){System.out.println("Mammal speak!");}

    void sleep(){System.out.println("shhh, I’m sleeping.");}

void animal(String animal)

{

    if(animal==dog)

{System.out.println("wangwang");}

    if(animal==pig)

{System.out.println("miao");}

    if(animal==cat)

{System.out.println("gaga");}

    if(animal==horse)

{System.out.println("aa");}

}}

///////////////////

package animal.mammal;

publicclass animal {

    /**

     * @param args

     */

    publicstaticvoid main(String[] args) {

       // TODO 自动生成方法存根

 Mammal animal = new  Mammal();

 String ani="horse";

 animal.move();

 animal.animal(ani);

    }

}

思考并验证

(1)     在程序中的哪些地方使用到了多态的机制?多态性为我们带来了什么好处?

(2)     试着把源文件放到另外一个目录下,然后编译,看看会得到什么信息?为什么会出现这种情况?

(3)     在定义宠物类的时候,是否使用了接口?如果没有使用,该定义一个什么接口,并如何修改程序?接口的使用为程序带来了什么好处?


班级号_学号_姓名_题号.java(多文件应压缩为rar):

实验5: JApplet(3学时)

实验目的

(1)     掌握Java Applet程序的结构和运行机制

(2)     掌握Java Applet程序的生命周期中触发的各种事件

(3)     复习Java语言中类的继承与方法的重载机制

实验内容及要求

编写一个Applet程序,在窗体中分别绘制由’*’组成的正方形和圆,尽量保证’*’号之间的间距相等。如下图所示:

* * * * * *

* * * * * *

* * * * * *

* * * * * *

* * * * * *

import java.awt.*;

import java.applet.*;

publicclass circle extends Applet

{

       publicvoid paint(Graphics g)

       {

       int i,j;

       int m,n;

       int left; //正方形左边起始坐标

       

       m=n=100;

       left=m;

      

      

                     for(i=0;i<5;i++)//用于绘制正方形的循环

        {

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

         {

          g.drawString("*", m, n);

          m=m+10;

         }

                  n=n+10;

                        m=left;

           }

      

           

       }

}

思考并验证

(1)     思考一个方法,验证Applet程序运行的生命周期中init、start、stop、destroy、paint几个方法被调用的时机。实现这个方法,并给出验证的结果。

//package com.imu;

import java.awt.*;

import java.applet.*;

public class Aplet extends Applet {

       StringBuffer buffer = new StringBuffer();

       public void init() {

       }

       public void start() {

              addItem("程序启动");

       }

       public void stop() {

       }

       public void destory() {

       }

       void addItem(String s) {

              System.out.println(s);

              buffer.append(s);// 将字符串输出在java console中

              repaint();

       }

       void CirclePoints(int x0, int y0, int x, int y, Graphics g) {

              g.drawString("*", x + x0, y + y0);

              g.drawString("*", y + x0, x + y0);

              g.drawString("*", -x + x0, y + y0);

              g.drawString("*", y + x0, -x + y0);

              g.drawString("*", x + x0, -y + y0);

              g.drawString("*", -y + x0, x + y0);

              g.drawString("*", -x + x0, -y + y0);

              g.drawString("*", -y + x0, -x + y0);

       }

       void Square(int m, int n, Graphics g) {

              g.drawString("绘制由*组成的正方形", 100, 80);

              int i, j;

              int left; // 正方形左边起始坐标

              left = m;

              m = n = 100;

              for (i = 0; i < 5; i++)// 用于绘制正方形的循环

              {

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

                            g.drawString("*", m, n);

                            m = m + 10;

                     }

                     n = n + 10;

                     m = left;

              }

       }

       void MidPointCircle(int x0, int y0, int r, Graphics g) {

              g.drawString("绘制有*组成的圆形", 300, 80);

              int x, y;

              float d;

              x = 0;

              y = r;

              d = (float) (1.25 - r);

              System.out.println( + d);

              while (x <= y) {

                     if (d < 0)

                            d = d + 2 * x + 3;

                     else {

                            d = d + 2 * (x - y) + 5;

                            y = y - 2;

                     }

                     x = x + 2;

                     CirclePoints(x0, y0, x, y, g);

              }

       }

       public void paint(Graphics g) {

              g.drawString(buffer.toString(), 5, 15);

              Square(100, 100, g);

              MidPointCircle(350, 150, 50, g);

       }

}

(2)     思路:

    import java.awt.*;

    import java.applet.*;

    publicclass c extends Applet {

        StringBuffer buffer = new StringBuffer();

        /*public void init() {

        }

        public void start() {

            addItem("程序启动");

        }

        public void stop() {

        }

        public void destory() {

        }*/

        void addItem(String s) {

            System.out.println(s);

            buffer.append(s);// 将字符串输出在java console中

            repaint();

        }

        void CirclePoints(int x0, int y0, int x, int y, Graphics g)

        {

            g.drawString("*", x + x0, y + y0);

            g.drawString("*", y + x0, x + y0);

            g.drawString("*", -x + x0, y + y0);

            g.drawString("*", y + x0, -x + y0);

            g.drawString("*", x + x0, -y + y0);

            g.drawString("*", -y + x0, x + y0);

            g.drawString("*", -x + x0, -y + y0);

            g.drawString("*", -y + x0, -x + y0);

        }

        void MidPointCircle(int x0, int y0, int r, Graphics g)

        {

            g.drawString("绘制有*组成的圆形", 300, 80);

            int x, y,i;

            for (i=r;i>=0;i--,r=r-5)

            {

            float d;

            x = 0;

            y = r;

            d = (float) (1.25 - r);

            System.out.println( + d);

           

           

            while (x <= y)

            {

                if (d < 0)

                    d = d + 2 * x + 3;

                else

                {

                    d = d + 2 * (x - y) + 5;

                    y = y - 2;

                }

                x = x + 2;

                CirclePoints(x0, y0, x, y, g);

            }

            }

        }

        publicvoid paint(Graphics g)

        {

            g.drawString(buffer.toString(), 5, 15);

            MidPointCircle(350, 150, 50, g);

        }

    }

(3)     谈一谈自己对Java Application程序与Applet程序之间区别的一些认识和看法。

(4)     班级号_学号_姓名_题号.java(多文件应压缩为rar):

实验6: 常用界面组件1(3学时)

实验目的

(1)   了解简单的GUI的设计方法

(2)   熟悉标签、按钮等基本组件的用法

(3)   熟悉文本框的用法

(4)   掌握按钮等组件的事件处理方法

(5)   熟悉字号的控制方式

实验内容及要求

如下图所示,当点击按钮时若输入文本框中的数正确,则标签文本显示正确,否则显示不正确。

 

 

 

 

 

 

 

 


思考并验证

(1)   若标签的字号比文本框中的字号大,应如何设置?

import java.awt.*;

import javax.swing.*;

import java.awt.event.*;

publicclass wyy1 extends JApplet implements ActionListener

{

      Container cp=getContentPane();

      JLabel lb=new JLabel("6+9= ");

      JLabel lb2=new JLabel("         ");

      JTextField tf1=new  JTextField(3);

      JButton bt=new JButton("OK");          

publicvoid init()

{

    lb.setFont(new Font("Arial",Font.PLAIN,24));

    setLayout(new FlowLayout());

    add(lb);

    add(tf1);

    add(lb2);

    add(bt);

    bt.addActionListener(this);

    setSize(150,200);

    setVisible(true);

}

publicvoid actionPerformed( ActionEvent e)

{

    if(e.getSource()==bt)

    {

       String str=tf1.getText();

       if(str.equals("15"))

         lb2.setText("正确");

       else

         lb2.setText("不正确");

}

}

}

(2)   你的程序用到哪几个组件?

(3)   能否去掉按钮”OK”,当输入回车时进行正确性显示?若能,应如何进行?

班级号_学号_姓名_题号.java(多文件应压缩为rar):

实验7: 常用界面组件2(3学时)

实验目的

(1)     掌握GridLayout类的用法

(2)     掌握标签、文本框、按钮等图形界面组件的使用,掌握按钮等组件的事件处理方法

(3)     理解Java的事件处理机制和委托事件模型,理解事件源、监听者等概念

实验内容及要求

设计一个简易计算器。在“操作数”标签右侧的两个文本框中输入操作数,当单击操作符+、-、*、÷按钮时,对两个操作数进行运算并将结果填入到“结果”标签的右侧文本框中

思考并验证

(1)   画出程序运行效果图:

import java.awt.*;

import javax.swing.*;

import java.awt.event.*;

publicclass wyy1 extends JApplet implements ActionListener

{

      Container cp=getContentPane();

      JLabel lb=new JLabel("操作数:");

      JTextField tf=new  JTextField(1);

      JTextField tf1=new  JTextField(1);

      JTextField tf2=new  JTextField(1);

      JLabel lb2=new JLabel("=");

      JTextField tf3=new  JTextField(1);

      JButton bt=new JButton("+");

      JButton bt1=new JButton("-");

      JButton bt2=new JButton("*");

      JButton bt3=new JButton("/");

   publicvoid init()

   {

    cp.setLayout(new GridLayout());

    add(lb);

    add(tf);

    add(tf1);

    add(tf2);

    add(lb2);

    add(tf3);

    add(bt);

    add(bt1);

    add(bt2);

    add(bt3);

    bt.addActionListener(this);

    bt1.addActionListener(this);

    bt2.addActionListener(this);

    bt3.addActionListener(this);

    setSize(300,200);

    setVisible(true);

   }

   publicvoid actionPerformed( ActionEvent e)

   {

     double a=0,b=0,d=0;

     String c;

     a=Double.parseDouble(tf.getText());

     c=tf1.getText();

     b=Double.parseDouble(tf2.getText());  

     if(e.getSource()==bt)

     {

     d=a+b;

     tf1.setText("+");

    tf3.setText(""+d);

     }

     if(e.getSource()==bt1)

     {

     d=a-b;

     tf1.setText("-");

     tf3.setText(""+d);

     }

     if(e.getSource()==bt2)

     {

     d=a*b;

     tf1.setText("*");

    tf3.setText(""+d);

     }

     if(e.getSource()==bt3)

     {

          d=a/b;

          tf1.setText("/");

    tf3.setText(""+d);

     }

     if(e.getSource()==bt)

        tf1.setText("+");

     if(e.getSource()==bt1)

        tf1.setText("-");

     if(e.getSource()==bt2)

        tf1.setText("*");      

     if(e.getSource()==bt3)

        tf1.setText("/");

     //if(e.getSource()==bt4)

        //tf3.setText(""+d);

       

      

    }

}

(2)   在你的程序中谁是事件源,相应的监听者是谁?

(3)   将程序中的嵌套if语句改写成switch语句,或反之。

班级号_学号_姓名_题号.java(多文件应压缩为rar):

实验8: 常用界面组件3(3学时)

实验目的

(1)   进一步了解简单GUI的设计方法

(2)   进一步熟悉标签、按钮、文本框等基本组件的用法

(3)   进一步掌握按钮等组件的事件处理方法

(4)   掌握Math.random()的用法

  double z1=Math.random();

      System.out.print("z1="+(int)(z1*100));

实验内容及要求

猜数游戏:要求程序中有两个按钮,点击一个时可以获得一个随机整数,然后在一个文本框中输入猜测,再单击另一个按钮,程序根据用户的猜测在另一个文本框中给出提示信息。

思考并验证

(1)   画出程序运行效果图:

import java.awt.*;

//import java.math.*;

import javax.swing.*;

import java.awt.event.*;

publicclass wyy1 extends JApplet implements ActionListener

{

      Container cp=getContentPane();

      JLabel lb=new JLabel("你要猜的数:");

      JTextField tf=new  JTextField(1);

      JLabel lb2=new JLabel("提示信息:");

      JLabel lb3=new JLabel("");

      JButton bt=new JButton("产生随机数");

      JButton bt1=new JButton("确定");

      JTextField tf1=new  JTextField(9);

   publicvoid init()

   {

    cp.setLayout(new GridLayout(3,2));

    add(lb);

    add(tf);

    add(lb2);

    add(lb3);

    add(bt);

    add(bt1);

    bt.addActionListener(this);

    bt1.addActionListener(this);

    setSize(300,200);

    setVisible(true);

   }

   publicvoid actionPerformed( ActionEvent e)

   {

     int a=0,b=0,z1=0;

     int ran = (int) (Math.random() * 100);

        String str = ran + "";

    if(e.getSource()==bt)    

     tf1.setText(str);

     if(e.getSource()==bt1)

     {

     if(Integer.parseInt(tf.getText())<Integer

                .parseInt(tf1.getText()))

     lb3.setText("小了!");

     if(Integer.parseInt(tf.getText())>Integer

                .parseInt(tf1.getText()))

     lb3.setText("大了!");

   

     if(Integer.parseInt(tf.getText())==Integer

                .parseInt(tf1.getText()))

     lb3.setText("猜对了!");

   }

   }

}

(2)   在Math中为什么将random()定义成静态成员函数?

import java.awt.*;

import java.awt.event.*;

publicclass qq {

    publicstaticvoid main(String[] args) {

       MyFrame fr = new MyFrame("test10");

    }

}

class MyFrame extends Frame {

    Button bt, bt1;

    Label diyi, tishi, xianshi;

    TextArea textArea, textArea1, textArea2;

    Panel pl, p2, p3, p4;

    /**

     * @param title

     */

    /**

     * @param title

     */

    public MyFrame(String title) {

       super(title);

       setBounds(100, 100, 400, 400);

       setLayout(new GridLayout(3, 1, 1, 1));

       setBackground(Color.gray);

       p2 = new Panel();

       p2.setSize(200, 100);

       add(p2);

       p4 = new Panel();

       p4.setSize(200, 200);

       add(p4);

       p3 = new Panel();

       p3.setSize(200, 200);

       add(p3);

       textArea = new TextArea("", 1, 7, TextArea.SCROLLBARS_NONE);

       textArea.setFont(new Font("Times New Roman", Font.PLAIN, 30));

       textArea2 = new TextArea("", 1, 7, TextArea.SCROLLBARS_NONE);

       textArea2.setFont(new Font("Times New Roman", Font.PLAIN, 30));

       diyi = new Label("您猜测的数字");

       diyi.setFont(new Font("Times New Roman", Font.PLAIN, 30));

       tishi = new Label("提示信息:");

       tishi.setFont(new Font("Times New Roman", Font.PLAIN, 30));

       xianshi = new Label("                   ");

       xianshi.setFont(new Font("Times New Roman", Font.PLAIN, 25));

       xianshi.setSize(200, 150);

       xianshi.setForeground(Color.red);

       bt = new Button("产生数");

       bt.setFont(new Font("Times New Roman", Font.PLAIN, 30));

       bt1 = new Button("确  定");

       bt1.setFont(new Font("Times New Roman", Font.PLAIN, 30));

       p2.add(diyi);

       p2.add(textArea2);

       p4.add(tishi);

       p4.add(xianshi);

       p3.add(bt);

       p3.add(bt1);

       addWindowListener(new WindowAdapter() {

           publicvoid windowClosing(WindowEvent e) {

              System.exit(0);

           }

       });

       MyLstn myLstn = new MyLstn(textArea);

       bt.addMouseListener(myLstn);

       MyLstn1 myLstn1 = new MyLstn1(textArea, textArea2, xianshi);

       bt1.addMouseListener(myLstn1);

       setVisible(true);

    }

}

class MyLstn extends MouseAdapter {

    TextArea textArea;

    public MyLstn(TextArea textArea) {

       this.textArea = textArea;

    }

    publicvoid mouseClicked(MouseEvent e) {

       int ran = (int) (Math.random() * 100 + 1);

       String str = ran + "";

       textArea.setText(str);

    }

} // MyLstn

class MyLstn1 extends MouseAdapter {

    Label xianshi;

    TextArea textArea, textArea2;

    public MyLstn1(TextArea textArea, TextArea textArea2, Label xianshi) {

       this.xianshi = xianshi;

       this.textArea = textArea;

       this.textArea2 = textArea2;

    }

    publicvoid mouseClicked(MouseEvent e) {

       if (textArea2.getText().equals(textArea.getText())) {

           xianshi.setText("结果正确!");

       } else {

           if (Integer.parseInt(textArea2.getText()) > Integer

                  .parseInt(textArea.getText()))

              xianshi.setText("猜的数过大");

           if (Integer.parseInt(textArea2.getText()) < Integer

                  .parseInt(textArea.getText()))

              xianshi.setText("猜的数过小");

       }

    }

}

(3)   用Math.random()产生指定范围(m~n)内的随机整数的语句为:

(4)   如何退出程序的执行?在程序中体现在何处?

(5)   猜数过程可进行多次,程序中有循环吗?


班级号_学号_姓名_题号.java(多文件应压缩为rar):

实验9: 界面布局(3学时)

实验目的

(1)   熟练运用标签、按钮、文本框等基本组件,掌握按钮等组件的事件处理方法

(2)   熟悉JTextArea的用法

(3)   熟悉下拉列表框的用法

实验内容及要求

创建一个GUI应用程序,用于转换若干种货币。提供给用户一个JTextArea以用于输入数量。同时还应提供给用户一种选择源货币名称和目的货币名称的途径。同时为自己的测试设置至少三种不同的货币名称及转换汇率。

思考并验证

(1)   画出程序运行效果图:


班级号_学号_姓名_题号.java(多文件应压缩为rar):

实验10: 小综合(6学时)

实验目的

(1)     学习布局的应用

(2)     巩固标签、文本框、按钮等图形界面组件的使用,巩固组件的事件处理方法。

(3)     提高语言成分的综合运用能力

(4)     文件的简单使用

(5)     对“算法及分析”有一个初步认识

实验内容及要求

用“筛选法”求2~n以内的所有素数:先去掉2的倍数,再去掉3的倍数,再去掉4的倍数,…,依此类推,最后剩下的就是素数。试按GUI方式图示化求解过程。

思考并验证

(1)   画出程序运行效果图:

(2)   使用的布局是:

(3)   本程序还可选用那些布局?

(4)   程序中用到了那些容器?

(5)   按另一种方式求2~n以内的所有素数。在你的方法中,为提高程序的执行效率,你采取了哪些优化措施?

(6)   修改程序,设法对循环进行计数。若n为1000,试对这两种求素数的方法在“时、空”两方面加以比较,你有什么感想?最后修改程序将所得素数存入文件中。


班级号_学号_姓名_题号.java(多文件应压缩为rar):

实验11: 输入/输出(3学时)

实验目的

(1)     了解流类及相关的包

(2)     掌握常用的流类及其成员函数的使用方法

(3)     学习输入/输出的基本方式

(4)     巩固常用组件的使用及其事件的处理方式

实验内容及要求

建立一个班级下拉式列表,列表项中有2004(1)班,2004(2)班,2004(3)班和2004(4)班。当点击某个选项时,将其成绩单显示在文本区中。

思考并验证

(1)     抓取程序运行的一个界面:

(2)     你的程序涉及到的文件有:

(3)     你是通过什么途径建立这些文件的?

(4)     能否用word建立这些文件?

更多相关推荐:
Java程序设计实验报告

学生实验报告册(理工类)课程名称:JAVA程序设计实验专业班级:M11计算机科学与技术II学生学号:学生姓名:所属院部:XX学院指导教师:20XX20XX学年第二学期金陵科技学院教务处制实验报告书写要求实验报告…

JAVA简单记事本程序设计实验报告(带源码)

JAVA程序设计实验报告院系专业班级11计算机01班姓名任课教师XXX实验题目JAVA简单记事本程序设计目录目录1一引言211课程设计目的212题目说明213开发工具介绍2二总体设计421系统开发平台422系统...

java程序设计课程--实验报告-实验09

Java开发技术实验报告实验序号实验09实验项目名称条件和循环语句二

Java程序设计实验报告 哈工大

Java语言基础实验指导报告书20xx20xx年秋季学期使用班级姓名计算机科学与技术学院实验一Java编程开发环境一实验学时1学时二实验目的1学习从网络下载JDK开发工具与帮助文档2学习安装JDK开发工具及其文...

Java程序设计实验报告20xx

Java程序设计实验指导报告书目录实验1熟悉Java开发环境2实验2简单的输入输出处理3实验3类的练习6实验4Java图形用户界面设计9实验5Java数据流21实验6Java多线程52实验7Java网络功能练习...

JAVA程序设计实验报告

JAVA程序设计实验报告姓名葛猛学号119xx4183班级软件工程112班指导教师柯栋梁20xx年12月24日实验1利用JAVA反射技术分析类结构1实验内容运行程序指定一个要分析的类名称如javalangDou...

简单java程序设计 实验报告

广州大学实验报告学院商学院专业、班级11电子商务姓名、学号课程名称Java语言程序设计项目名称简单java程序设计实验时间:20##年3月8日简单java程序设计_实验报告

JAVA网络程序设计实验报告

Java网络程序设计实验五JDBC班级姓名学号日期20xx68实验五JDBC一实验目的1掌握SQL语句和MYSQL数据库操作命令2掌握关系型数据库设计规则3掌握JDBC类库包使用规则二实验内容1学习SQL语言基...

java程序设计 实验报告7

学生实验报告书实验课程名称实验课程名称实验课程名称实验课程名称实验课程名称

《JAVA程序设计》实验报告

福建师范大学协和学院本科实验报告课程名称JAVA程序设计系别信息技术系专业计算机科学与技术班级学号姓名20xx年实验项目列表JAVA程序设计实验相关说明实验要求1明确实验课是课程的重要组成部分与理论课有着同等地...

java程序设计课程--实验报告-实验04

Java开发技术实验报告实验序号实验04实验项目名称Applet的编写与运行

Java语言程序设计实验报告1

Java语言程序设计实验报告一学生姓名孙文琳班级信息111学号20xx52275119实验地点经管中心证券实验室指导教师赵利平实验日期20xx36实验环境Windows20xxJDK161实验目的1养成良好的编...

java程序设计实验报告(36篇)