admin管理员组

文章数量:1534200

2023年12月14日发(作者:)

.

.

Java程序设计

实验报告

班级: 网络 151

姓名: 徐毅民

学号: 153299

.

实验一 Java语言基础

一.实验目的

掌握 Java语言的基本语法、基本数据类型的使用方法,掌握从键盘输入基本类型的数据,熟练运用分支、循环等语句控制程序流程。

二.实验内容

1、编写一个Java应用程序,用户从键盘输入十名学生的信息,至少包括姓名、年龄、出生年月日、java课程实验成绩,成绩使用浮点数,年龄使用整型,程序将输出年龄、java课程实验成绩的平均值。

提示:Scanner对象调用nextDouble()或nextFloat()可以获取用户从键盘输入的浮点数。

2、使用Arrays类实现数组排序:使用包中的Arrays类的类方法public static void sort(double a[])可以把参数a指定的double类型数组按升序排序;public static void sort(double a[], int start , int

end)可以把参数a指定的double类型数组中从位置start到end位置的值按升序排序。

给定数组 int a[]={12,34,9,-23,45,6,90,123,19,45,34}; 从键盘读入一个整数,使用折半查找判断该整数是否在这个数组中,并将结果输出。

3、输出100~200之间的所有素数。

4、采用for循环求1至1000之内的所有“完全数”。所谓“完全数”是指一个数,恰好等于它的因子之和。例如,6是一个完全数,因为6的因子为1、2、3,而6=1+2+3。

. .

5、已知XYZ+YZZ=532,其中X、Y和Z为数字,编程求出X,Y和Z的值。

三.实验步骤

实验1以最终学生信息管理系统为准

实验2代码如下:

import ;

import r;

public class test2 {

public static void printDoubleArray(double a[]) {

}

public static void printfIntegerArray(int a[]) {

}

public static void main(String[] args) {

.

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

}

n();

(a[i]+" ");

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

}

n();

(a[i]+" "); .

.

double a[] = {2.6, 4.6, 2, 8, 888, 569.5, 454.5, 100, -84.5, 45};

n("原double数组a:");

printDoubleArray(a);

(a, 0, /2);

n("排序double数组a前一半:");

printDoubleArray(a);

(a);

n("排序整个double数组a:");

printDoubleArray(a);

int b[] = {12, 34, 9, -23, 45, 6, 90, 123, 19, 45, 34};

(b);

n("排序整个double数组b:");

printfIntegerArray(b);

Scanner in = new Scanner();

("输入要查询的数字:");

int key = t();

int i = Search(b, key);

if(i < 0 || i >= ) {

n(i+"输入数字不在数组中!");

} else {

n(b[i]+"在数组b第"+(i+1)+"位!"); .

}

}

}

实验3代码如下:

public class test3 {

public static boolean isPrime(int x) {

}

public static void main(String[] args) {

.

if(x == 1) return false;

int s = (int)(x);

for(int i = 2; i <= s; i++) {

}

return true;

if(x%i == 0) return false;

int cnt = 0;

for(int i = 100; i < 200; i++) {

if(isPrime(i)) {

}

if(isPrime(i) && cnt%10 == 0) n();

cnt++;

("%4d", i); .

}

}

}

实验4代码如下:

public class test4 {

public static boolean isCompleteNumber(int x) {

}

public static void main(String[] args) {

.

int sum = 0;

for(int i = 1; i < x; i++) {

}

return x == sum;

if(x%i == 0) sum += x;

int cnt = 0;

for(int i = 1; i <= 1000; i++) {

if(isCompleteNumber(i)) {

}

if(isCompleteNumber(i) && cnt%10 == 0)

n();

cnt++;

("%4d", i);

.

}

}

}

实验5代码如下:

public class test5 {

public static void main(String[] args) {

Z="+z);

}

}

}

}

}

}

return;

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

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

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

if(100*x+110*y+12*z == 532) {

n("X="+x+" Y="+y+"

四.详细的调试和运行结果

实验2运行结果:

. .

原double数组a:

2.6 4.6 2.0 8.0 888.0 569.5 454.5 100.0 -84.5 45.0

排序double数组a前一半:

2.0 2.6 4.6 8.0 888.0 569.5 454.5 100.0 -84.5 45.0

排序整个double数组a:

-84.5 2.0 2.6 4.6 8.0 45.0 100.0 454.5 569.5

排序整个double数组b:

-23 6 9 12 19 34 34 45 45 90 123

输入要查询的数字:-23

-23在数组b第一位!

实验3运行结果:

101 103 107 109 113 127 131 137 139 149

151 157 163 167 173 179 181 191 193 197

199

实验4运行结果:

2 3 5 7 11 13 17 19 23 29

.

888.0 .

31 37 41 43 47 53 59 61 67 71

73 79 83 89 97 101 103 107 109 113

127 131 137 139 149 151 157 163 167 173

179 181 191 193 197 199 211 223 227 229

233 239 241 251 257 263 269 271 277 281

283 293 307 311 313 317 331 337 347 349

353 359 367 373 379 383 389 397 401 409

419 421 431 433 439 443 449 457 461 463

467 479 487 491 499 503 509 521 523 541

547 557 563 569 571 577 587 593 599 601

607 613 617 619 631 641 643 647 653 659

661 673 677 683 691 701 709 719 727 733

739 743 751 757 761 769 773 787 797 809

811 821 823 827 829 839 853 857 859 863

877 881 883 887 907 911 919 929 937 941

947 953 967 971 977 983 991 997

实验5运行结果:

X=3 Y=2 Z=1

五.实验感想

通过本次从实验对java语言的基本语法有了基本了解,学会了. .

使用控制台命令行的方式运行java程序。

. .

实验二 面向对象程序设计

一.实验目的

通过编程和上机实验,掌握类和构造方法的定义及创建对象的方法,掌握类的封装及继承原则,正确使用重载和覆盖等多态概念设计可复用方法,熟悉包、接口的使用方法,掌握面向对象的程序设计方法。

二.实验内容

1、编写MyDate类,完善上次实验中的人员信息录入,实现日期合法性判断,包括大小月和闰年。

2、声明一个Person类和派生类Student,成员变量包括学号、姓名、入学时间、身份证号、学分绩点等信息,成员方法包括开户、存款、取款、查询(余额、明细)、销户等操作。

3、定义接口Shape及其抽象方法getArea()和getPerimeter()用于计算图形和面积和周长。定义类Rectangle(矩形)、类Circle(圆形)、类Triangle(三角形),要求这些类继承点类Coordinates()并实现接口的抽象方法。

提示:

class Coordinates

{

long x;

long y;

Coordinate(long x, long y)

{

. .

this.x=x;

this.y=y;

}

}

4、包的定义和使用

 创建自定义包Mypackage

在存放源程序的文件夹中建立一个子文件夹 Mypackage。例如,在“E:java程序”文件夹之中创建一个与包同名的子文件夹

Mypackage(E:java程序Mypackage),并将编译过的 class 文件放入该文件夹中。注意:包名与文件夹名大小写要一致。再添加环境变量 classpath 的路径,例如:E:j2sdk1.4.2_01lib; E:java程序

 在包中创建类

程序功能:在源程序中,首先声明使用的包名Mypackage,然后创建YMD 类,该类具有计算今年的年份并输出一个带有年月日的字符串的功能。编译Test_文件,然后将Test_文件存放到Mypackage文件夹中。

 编写使用包Mypackage中Test_YMD类的程序

YMD_程序功能:给定某人姓名与出生日期,计算该人年龄,并输出该人姓名,年龄,出生日期。程序使用了Test_YMD 的方法来计算年龄。

三.实验步骤

. .

实验1代码如下:

MyDate类:

public class MyDate {

private int year; //年

private int month; //月

private int day;

public MyDate() {

}

public MyDate(MyDate other) {

}

public MyDate(int year, int month, int day) {

}

public static int getDaysOfMonth(int year, int month) {

12:return 31;

case 4:case 6:case 9:case 11: return 30;

switch(month) {

case 1:case 3:case 5:case 7:case 8:case 10:case

= year;

= month;

= day;

this(, , );

this(1903, 1, 1);

//日

. .

}

}

case 2: return Year(year)?29:28;

default: return _VALUE; //错误

public boolean isValidDate() {

}

public void setMyDate(int year, int month, int day) {

}

public int getYear() {

}

public int getMonth() {

}

public int getDay() {

}

public static boolean isValidDate(int year, int month, int day) {

.

return dDate(, , );

= year;

= month;

= day;

return year;

return month;

return day; .

}

if(day > sOfMonth(year, month)) {

}

return true;

return false;

public static boolean isLeapYear(int year) {

}

public static void main(String args[]) {

正确!");

不正确!");

.

return year%400==0 || year%100!=0 && year%4==0;

int sel, y, m, d;

Scanner in = new Scanner();

while(true) {

n("请输入年月日:");

y = t();

m = t();

d = t();

if(dDate(y, m, d)) {

n(y+"年"+m+"月"+d+"日"+"信息

} else {

n(y+"年"+m+"月"+d+"日"+"信息.

}

}

}

}

n("是否继续输入?(1:是,0:否)");

sel = t(); if(sel == 0) break;

实验2以最终学生信息管理系统为准

实验3代码如下:

Shape接口:

public interface Shape {

public abstract double getArea();

public abstract double getPerimeter();

}

Rectangle类:

public class Rectangle implements Shape {

private double width;

private double height;

private Coordinate c; //矩形左下角的点

public Rectangle() {

= 0;

. .

}

= 0;

this.c = new Coordinate(0, 0);

public Rectangle(double width, double height, int x, int y) {

}

@Override

public double getArea() {

}

@Override

public double getPerimeter() {

}

}

Circle类

public class Circle implements Shape {

private double radius;

private Coordinate center;

.

= width;

= height;

this.c = new Coordinate(x, y);

return *;

return 2*(+); .

public Circle() {

}

public Circle(double radius, long x, long y) {

}

@Override

public double getArea() {

}

@Override

public double getPerimeter() {

}

}

Triangle类

public class Triangle implements Shape {

private double a, b, c;

private Coordinate c1, c2, c3;

public Triangle() {

.

= 0;

= new Coordinate(0, 0);

= radius;

= new Coordinate(x, y);

return **;

return 2**; .

}

this.a = 0;

this.b = 0;

this.c = 0;

this.c1 = new Coordinate(0, 0);

this.c2 = new Coordinate(0, 0);

this.c3 = new Coordinate(0, 0);

@Override

public double getArea() {

}

@Override

public double getPerimeter() {

}

public static boolean isVaild(double a, double b, double c) {

if(a+b <= c || a+c <= b || b+c <= a) {

}

if((a-b) >= c || (a-c) >= b ||

return false;

return this.a+this.b+this.c;

double s = imeter()/2;

return (s*(s-a)*(s-b)*(s-c));

(b-c) >= a) {

. .

}

}

}

return false;

return true;

测试类

public class test3 {

public static void main(String[] args) {

Shape shape;

Scanner in = new Scanner();

n("请输入矩形的宽、高,左下角点的横坐标、纵坐标:");

shape = new Rectangle(uble(), uble(),

t(), t());

n("矩形的面积:"+a()+" 周长"+imeter());

纵坐标:");

t());

n("圆形的面积:"+a()+" 周shape = new Circle(uble(), t(),

n("请输入圆的半径,圆心的横坐标、长"+imeter());

. .

double a, b, c;

n("请输入三角形的三条边长:");

a = uble(); b = uble(); c =

uble();

三条边长:");

a = uble(); b = uble(); c =

while(!d(a, b, c)) {

n("这不是一个三角形,请重新输入uble();

坐标:");

shape = new Triangle(a, b, c, t(), t(),

}

n("请分别输入三个顶点的横坐标、纵t(), t(), t(), t());

n("三角形的面积:"+a()+"

周长"+imeter());

}

}

实验4代码如下:

. .

五.详细的调试和运行结果

实验1运行结果:

请输入年月日:

2001 12 56

2001年12月56日信息不正确!

是否继续输入?(1:是,0:否)

1

请输入年月日:

1900 2 29

1900年2月29日信息不正确!

是否继续输入?(1:是,0:否)

0

实验2以最终学生信息管理系统为准

实验3运行结果:

请输入矩形的宽、高,左下角点的横坐标、纵坐标:

7 8 9 10

矩形的面积:56.0 周长30.0

请输入圆的半径,圆心的横坐标、纵坐标:

2 3 4

圆形的面积:12.56637 周长12.56637

请输入三角形的三条边长:

. .

3 4 5

请分别输入三个顶点的横坐标、纵坐标:

4 5 8 5 4 8

三角形的面积:6.0 周长12.0

实验4运行结果:

五.实验感想

通过本次从实验对java语言的基本语法有了更深刻的了解,对java中类的定义和面向对象的设计有了基本的了解。

. .

实验三 异常处理程序设计

一.实验目的

了解Java中异常处理(exception)的作用及常用的异常类,掌握异常处理的设计方法。

二.实验内容

1、用try-catch-finally结构实现异常处理。编译并运行程序,写出程序运行结果。

2、设计一个Java程序,自定义异常类,从命令行(键盘)输入一个字符串,如果该字符串值为“XYZ”,则抛出一个异常信息“This

is a XYZ”,如果从命令行输入ABC,则没有抛出异常。(只有XYZ和ABC两种输入)。

3、声明一个Average接口,其中约定求平均值的方法;声明多个类实现Average接口,分别给出求平均值的方法实现。例如,在一组数值中,一种算法是,全部数值相加后求平均值,另一种算法是,去掉一个最高分和一个最低分后,再将总分求平均等;使用键盘输入数据时,对于不能转换成数值的字符串进行异常处理。

三.实验步骤

实验1代码如下:

public class ExceptionTest {

public static void main(String[] args) {

int i = 0;

. .

String greeting[] = {"Hello", "Only", "Test"};

while(i < 4) {

try {

n(greeting[i]);

} catch(ArrayIndexOutOfBoundsException e) {

n("数组越界");

} finally {

n("总会运行");

}

i++;

}

}

}

实验2代码如下:

import r;

public class MyException extends Exception {

private static final long serialVersionUID = 1L;

String information;

public MyException() {

ation = ng();

}

public MyException(String s) {

. .

ation = s;

}

public String getString() {

return ation;

}

public static void main(String[] args) {

int sel;

String input;

Scanner in = new Scanner();

while(true) {

try {

input = ();

if(("XYZ")) {

throw new MyException("This is a XYZ");

}

} catch(MyException e) {

n(ing());

} finally {

("是否继续输入?(1:是,0:否)");

sel = t();

if(sel == 0) break;

. .

}

}

}

}

实验3以最终学生信息管理系统为准

四.详细的调试和运行结果

实验1运行结果:

Hello

总会运行

Only

总会运行

Test

总会运行

数组越界

总会运行

实验2运行结果:

请输入XYZ或ABC:

ABC

是否继续输入?(1:是,0:否):

1

. .

请输入XYZ或ABC:

XYZ

This is a XYZ

是否继续输入?(1:是,0:否):

0

五.实验感想

通过本次实验对java的异常处理机制有了很深的了解。

. .

实验四 图形用户界面程序设计

1.实验目的:掌握组件的使用方法,理解委托事件处理模型。熟悉图形用户界面基本组件的使用方法,熟悉如何使用布局管理器对组件进行管理及如何使用Java的事件处理机制。

实验内容:

1、 输入一个整数,分别显示其百位、十位和个位数字,图形用户界面如图4.1所示。要求:整数文本行可编辑且能实现事件处理,当输入数据错误时,处理异常,弹出对话框,提示重新输入信息;其他文本行仅用于显示不可编辑。

源代码:

package sy4;

import yout;

import ;

import eld;

import Event;

import Listener;

import n;

import ;

import nPane;

public class Mineframe extends JFrame implements ActionListener

{

static TextField T=new TextField(20);

static TextField T1=new TextField(20);

static TextField T2=new TextField(20);

.

static TextField T3=new TextField(20);

{

super("Display the number of integers");

e(300,140);

ation(300,240);

out(new FlowLayout());

(new Label("整数"));

(T);

(new Label("百位"));

table(false);

(T1);

(new Label("十位"));

public Mineframe() .

table(false);

(T2);

(new Label("个位"));

table(false);

(T3);

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

(button);

ionListener(this);

izable(true);

aultCloseOperation(EXIT_ON_CLOSE);

ible(true);

ionListener(this);

}

public void actionPerformed(ActionEvent e)throws NumberFormatException

{

try

{

String str=t();

int t1,t2,t3;

t1=num/100;

t2=(num/10)%10;

t3=(num%100)%10;

t(f(t1));

t(f(t2));

t(f(t3));

}

catch(NumberFormatException nfe)

{

}

finally

{String str=t();

int t1,t2,t3;

t1=num/100;

t2=(num/10)%10;

t3=(num%100)%10;

t(f(t1));

t(f(t2));

ssageDialog(this, "不能转换为整数");

int num=nt(str);

int num=nt(str);

. .

}

t(f(t3));

}

public static void main(String args[])

{

new Mineframe();

}

}

实验结果:

2、 模拟实现一个可视化的简单计算器,至少提供进行加法、减法、乘法、除法等基本运算的功能,希望能支持加正负号、求平方根、清零等其他功能。

源代码:

package sy4;

.

import .*;

import .*;

import .*;

import Event;

import Listener;

public class Counter extends JFrame implements

{

private JTextField text;

private JButton[] button;

private MessageJDialog jdialog;

static String ope="";

static String flag="";

//标记操作数

//标记运算符号

//number用来表示当前数字

ActionListener//,WindowListener

private static String number=""; .

static double save=0,result=0,num=0; //save保留前一值,result为结果,num用来记录小数点个数

String operation[]={ "sqrt", "+/-", "backspace", "C", "7", "8", "9",

"/", "4", "5", "6", "*", "1", "2", "3", "-", "0", ".","=", "+" };

public Counter()

{

}

public void actionPerformed(ActionEvent e)

{

if(rce()==button[16])

{

if(ope=="")

{

if(!t().equals("0"))

{

number=t()+"0";

// "0"

super("计算器");

button=new JButton[];

nds(280,100,300,240);

aultCloseOperation(EXIT_ON_CLOSE);

JPanel panel=new JPanel(new FlowLayout());

tentPane().add(panel);

//JPanel panelR=new JPanel(new GridLayout(1,1));

(panelR);

text=new JTextField("0",6);

(text);

JPanel panelID[]=new JPanel[5];

}

ible(true);

jdialog=new MessageJDialog(this);

if(i%4==0)

{

}

button[i]=new JButton(operation[i]);// 这里是按钮的布局

button[i].addActionListener(this);

panelID[i/4].add(button[i]);

panelID[i/4]=new JPanel(new GridLayout(1,4));

(panelID[i/4]);

//设置按钮

设置text文本框

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

//四个键为一行

. .

t(number);

}

else

{

t("0");

}

}

else

{

ope="";

t("0");

}

if(flag=="")

save=ouble(t());

}

if(rce()==button[12])

{

if(ope=="")

{

if(!t().equals("0"))

{

number=t()+"1";

t(number);

}

else

{

t("1");

}

}

else

{

ope="";

t("1");

}

if(flag=="")

save=ouble(t());

}

if(rce()==button[13])

{

if(ope=="")

{

if(!t().equals("0"))

{

number=t()+"2";

.

// "1"

// "2", .

t(number);

}

else

{

t("2");

}

}

else

{

ope="";

t("2");

}

if(flag=="")

save=ouble(t());

}

if(rce()==button[14])

{

if(ope=="")

{

if(!t().equals("0"))

{

number=t()+"3";

t(number);

}

else

{

t("3");

}

}

else

{

ope="";

t("3");

}

if(flag=="")

save=ouble(t());

}

if(rce()==button[8])

{

if(ope=="")

{

if(!t().equals("0"))

{

number=t()+"4";

.

// "3"

//"4"

.

t(number);

}

else

{

t("4");

}

}

else

{

ope="";

t("4");

}

if(flag=="")

save=ouble(t());

}

if(rce()==button[9])

{

if(ope=="")

{

if(!t().equals("0"))

{

number=t()+"5";

t(number);

}

else

{

t("5");

}

}

else

{

ope="";

t("5");

}

if(flag=="")

save=ouble(t());

}

if(rce()==button[10])

{

if(ope=="")

{

if(!t().equals("0"))

{

number=t()+"6";

.

// "5"//"6"

.

t(number);

}

else

{

t("6");

}

}

else

{

ope="";

t("6");

}

if(flag=="")

save=ouble(t());

}

if(rce()==button[4])

{

if(ope=="")

{

if(!t().equals("0"))

{

number=t()+"7";

t(number);

}

else

{

t("7");

}

}

else

{

ope="";

t("7");

}

if(flag=="")

save=ouble(t());

}

if(rce()==button[5])

{

if(ope=="")

{

if(!t().equals("0"))

{

number=t()+"8";

.

// "7"// "8"

.

t(number);

}

else

{

t("8");

}

}

else

{

ope="";

t("8");

}

if(flag=="")

save=ouble(t());

}

if(rce()==button[6])

{

if(ope=="")

{

if(!t().equals("0"))

{

number=t()+"9";

t(number);

}

else

{

t("9");

}

}

else

{

ope="";

t("9");

}

if(flag=="")

save=ouble(t());

}

if(rce()==button[0])

{

double d=ouble(t());

d=(d);

t(""+d);

if(flag=="")

save=d;

.

// "9"

//"sqrt" .

}

if(rce()==button[1])

{

double d=ouble(t());

d=0-d;

t(""+d);

if(flag=="")

save=d;

}

if(rce()==button[2])

{

save=0;

ope="";

flag="";

t("");

}

if(rce()==button[3])

{

num=0;

t("");

}

if(rce()==button[19])

{

flag="+";

ope="+";

t("+");

num=0;

}

if(rce()==button[15])

{

flag="-";

ope="-";

t("-");

num = 0;

}

if(rce()==button[11])

{

flag="*";

ope="*";

t("*");

num=0;

}

if(rce()==button[7])

{

.

//"C"

//"+"

// "-"// "*"// "/"

.

}

}

flag="/";

ope="/";

t("/");

num=0;

// "." if(rce()==button[17])

{

}

if(rce()==button[18])

{

}

if(("+"))

{

}

if(("-"))

{

}

if(("*"))

{

}

if(("/"))

{

}

save=result;

num=0;

flag="";

ope="=";

//进行连续运算

String str=t()+".";

t(str);

//"="

result=save+ouble(t());

t(""+result);

result=ouble(t());

t(""+result);

result=save*ouble(t());

t(""+result);

result=save/ouble(t());

t(""+result);

private class MessageJDialog extends JDialog

{

JFrame jframe;

JLabel jlabel;

. .

}

}

}

MessageJDialog(JFrame jframe)

{

}

void show(String message)

{

}

t(message);

ation(()+30,()+70);

ible(true);

super(jframe,"提示",true);

=jframe;

e(240,100);

jlabel=new JLabel("",);

tentPane().add(jlabel);

aultCloseOperation(HIDE_ON_CLOSE);

public static void main(String args[])

{

}

new Counter();

实验结果:

3、设计图形界面实现学生的信息录入,至少包括姓名、年龄、出生年月日、Java课程实验成绩,成绩使用浮点数,年龄使用整型,使用数据存储输入对象,程序输出按年龄排序的学生信息。

源代码:

package sy4;

import Event;

import Listener;

. .

import n;

import ;

import ;

import ;

import lPane;

import ;

import ield;

public class Sframe extends JFrame implements ActionListener

{

private JTextField T1,T2,T3,T4;

private JButton button,button2;

private JTable table;

int num=10;

String a[]=new String[num] ;

String b[]=new String[num] ;

String c[]=new String[num] ;

String d[]=new String[num] ;

int k=0;

public Sframe()

{

super("学生信息管理");

nds(300,240,740,400);

aultCloseOperation(EXIT_ON_CLOSE);

JPanel panel=new JPanel();

tentPane().add(panel,"North");

(new JLabel("姓名"));

T1=new JTextField(6);

(T1);

(new JLabel("年龄"));

T2=new JTextField(6);

(T2);

(new JLabel("出生日期"));

T3=new JTextField(6);

(T3);

(new JLabel("分数"));

T4=new JTextField(6);

(T4);

button=new JButton ("确定");

. .

(button);

ionListener(this);

button2=new JButton("排序");

(button2);

ionListener(this);

actionPerformed(null);

tentPane().add(new JScrollPane(table));

ible(true);

}

public void actionPerformed(ActionEvent e)

{

String titles[]= {"姓名","年龄","出生日期","成绩"};

Object datas[][]=new Object[num][4];

a[k]=t();

b[k]=t();

c[k]=t();

d[k]=t();

if(k<9) k++;

for(int i=0;i

{

datas[i][0]=a[i];

datas[i][1]=b[i];

datas[i][2]=c[i];

datas[i][3]=d[i];

}

table=new JTable(datas,titles);

tentPane().add(new JScrollPane(table));

ible(true);

}

}

{

new Sframe();

public static void main(String args[])

}

. .

实验结果:

. .

实验五 多线程程序设计

实验目的:理解多线程的概念,掌握创建、管理和控制Java线程对象的方法,包括创建Java线程对象、改变线程状态、设置线程优先级及控制线程调度等方法,掌握实现线程互斥和线程同步的方法。

实验内容:

1、 编写一个有两个线程的程序,第一个线程用来计算2~1000之间的偶数及个数,第二个线程用来计算1000~2000之间的偶数及个数。

源代码:

public class Even_Count extends Thread{

的操作

(e()+": ");

if(first == 2){

for(int i=first;i<=1000;i+=2){

(i+" ");

count++;

}

private int first;

private int count;

public Even_Count(String name,int first){//起始数字

}

public Even_Count(String name){

}

public void run(){//run方法中根据起始数字的不同执行不同this(name,0);

super(name);

= first;

count = 0;

n(e()+"结束,2~1000之间的偶数个数为:"+count);

. .

}

if(first == 1000){

for(int i=first;i<=2000;i+=2){

}

(i+" ");

count++;

n(e()+"结束,1000~2000之间的偶数个数为:"+count);

());

Even_Count even1 = new Even_Count("2~1000之间的偶

}

public static void main(String[] args) {

}

n("currentThread="+tThread().getName数",2);//初始化线程对象

Even_Count even2 = new Even_Count("1000~2000之间的偶数",1000);

(); //线程开始

();

n("activeCount="+Even_Count());

}

结果:

}

. .

2、编写一个Java应用程序,在主线程中再创建两个线程,要求线程经历四种状态:新建,运行、中断和死亡。按模板要求,将【代码1】~【代码8】替换为Java程序代码。

源代码:

package sy5;

class Rabit extends Thread

{

int sleepTime=0, liveLength=0;

public Rabit(String name,int sleepTime, int liveLength)

{

super(name);

ime=sleepTime;

ngth=liveLength;

}

public void run()

{

while (true )

{

liveLength--;

n("*_*");

try{

sleep( sleepTime);

}

catch (InterruptedException e) {}

if (liveLength<=0 )

. .

{

n(getName()+"进入死亡状态n");

break;

}

}

}

}

class Tortoise extends Thread

{ int sleepTime=0, liveLength=0;

public Tortoise(String name,int sleepTime, int liveLength)

{

super(name);

ime=sleepTime;

ngth=liveLength;

}

public void run()

{ while (true)

{

liveLength--;

n("@_@");

try{

sleep(sleepTime); // 让线程调用sleep()方法进入中断状态

}

catch (InterruptedException e) {}

if (liveLength<=0 )

{

n(getName()+"进入死亡状态n");

break;

}

}

. .

}

}

public class ThreadExample

{

public static void main(String a[])

{

Rabit rabit;

rabit =new Rabit("Rabit",100,3); // 新建线程rabit

Tortoise tortoise =new Tortoise("Tortoise",100,3); // 新建线程tortoise

();

();

}

}

结果:

3、编写一个Java应用程序,在主线程中创建三个线程:zhangWorker,wangWorker 和 boss。线程zhangWorker和wangWorker分别负责在命令行输出“搬运苹果”和“搬运香蕉”,这两个线程分别各自输出20行,每输出一行信息就准备休息10秒钟,但是boss线程负责不让zhangWorker和wangWorker休息。按模板要求,将【代码1】~【代码8】替换为Java程序代码。

源代码:

package sy5;

class Shop implements Runnable

{

. .

Thread zhangWorker, wangWorker, boss;

public Shop()

{ boss = new Thread(this); // 创建boss,Shop对象为boss目标对象

zhangWorker = new Thread(this); // 创建zhangWorker,Shop对象为boss目标对象

wangWorker = new Thread(this); // 创建wangWorker,Shop对象为boss目标对象

e("老板");

e("张工");

e("王工");

}

public void run()

{

//n("1");

int i=0;

if (tThread()==zhangWorker)

{ while (true )

{

try { i++;

("n%s 已搬运了%d 箱苹果n",e(),i);

if (i==20)

return ;

(10000); // zhangWorker休眠10秒(10000毫秒)

}

catch(InterruptedException e)

{

("n%s 让 %s 继续工作",e(),e(),i);

.

本文标签: 使用方法实验线程输入