的班级号_学号_姓名_题号.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) 在程序中,你是否生成了自己定义类的对象?如果要求不可以生成类的对象
实例,程序应如何修改?
第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,使得11+22+…+nn小于等于long数据类型所能表示的最大值(即Long.MAX_VALUE),并给出11+22+…+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建立这些文件?