河北工业大学Java程序设计实验报告_第1页
河北工业大学Java程序设计实验报告_第2页
河北工业大学Java程序设计实验报告_第3页
河北工业大学Java程序设计实验报告_第4页
河北工业大学Java程序设计实验报告_第5页
已阅读5页,还剩72页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

...wd......wd......wd...Java程序设计实验报告班级:网络151姓名:徐毅民学号:153299实验一Java语言根基一.实验目的掌握Java语言的基本语法、基本数据类型的使用方法,掌握从键盘输入基本类型的数据,熟练运用分支、循环等语句控制程序流程。实验内容1、编写一个Java应用程序,用户从键盘输入十名学生的信息,至少包括姓名、年龄、出生年月日、java课程实验成绩,成绩使用浮点数,年龄使用整型,程序将输出年龄、java课程实验成绩的平均值。提示:Scanner对象调用nextDouble()或nextFloat()可以获取用户从键盘输入的浮点数。2、使用Arrays类实现数组排序:使用java.util包中的Arrays类的类方法publicstaticvoidsort(doublea[])可以把参数a指定的double类型数组按升序排序;publicstaticvoidsort(doublea[],intstart,intend)可以把参数a指定的double类型数组中从位置start到end位置的值按升序排序。给定数组inta[]={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代码如下:importjava.util.Arrays;importjava.util.Scanner;publicclasstest2{ publicstaticvoidprintDoubleArray(doublea[]){ for(inti=0;i<a.length;i++){ System.out.print(a[i]+""); } System.out.println(); } publicstaticvoidprintfIntegerArray(inta[]){ for(inti=0;i<a.length;i++){ System.out.print(a[i]+""); } System.out.println(); } publicstaticvoidmain(String[]args){ doublea[]={2.6,4.6,2,8,888,569.5,454.5,100,-84.5,45}; System.out.println("原double数组a:"); printDoubleArray(a); Arrays.sort(a,0,a.length/2); System.out.println("排序double数组a前一半:"); printDoubleArray(a); Arrays.sort(a); System.out.println("排序整个double数组a:"); printDoubleArray(a); intb[]={12,34,9,-23,45,6,90,123,19,45,34}; Arrays.sort(b); System.out.println("排序整个double数组b:"); printfIntegerArray(b); Scannerin=newScanner(System.in); System.out.print("输入要查询的数字:"); intkey=in.nextInt(); inti=Arrays.binarySearch(b,key); if(i<0||i>=b.length){ System.out.println(i+"输入数字不在数组中!"); }else{ System.out.println(b[i]+"在数组b第"+(i+1)+"位!"); } }}实验3代码如下:publicclasstest3{ publicstaticbooleanisPrime(intx){ if(x==1)returnfalse; ints=(int)Math.sqrt(x); for(inti=2;i<=s;i++){ if(x%i==0)returnfalse; } returntrue; } publicstaticvoidmain(String[]args){ intcnt=0; for(inti=100;i<200;i++){ if(isPrime(i)){ cnt++; System.out.printf("%4d",i); } if(isPrime(i)&&cnt%10==0)System.out.println(); } }}实验4代码如下:publicclasstest4{ publicstaticbooleanisCompleteNumber(intx){ intsum=0; for(inti=1;i<x;i++){ if(x%i==0)sum+=x; } returnx==sum; } publicstaticvoidmain(String[]args){ intcnt=0; for(inti=1;i<=1000;i++){ if(isCompleteNumber(i)){ cnt++; System.out.printf("%4d",i); } if(isCompleteNumber(i)&&cnt%10==0) System.out.println(); } }}实验5代码如下:publicclasstest5{ publicstaticvoidmain(String[]args){ for(intx=0;x<10;x++){ for(inty=0;y<10;y++){ for(intz=0;z<10;z++){ if(100*x+110*y+12*z==532){ System.out.println("X="+x+"Y="+y+"Z="+z); return; } } } } }}详细的调试和运行结果实验2运行结果:原double数组a:8.0888.0569.5454.5100.0-84.545.0排序double数组a前一半:2.0888.0569.5454.5100.0-84.545.0排序整个double数组a:-84.52.045.0100.0454.5569.5888.0排序整个double数组b:-236912193434454590123输入要查询的数字:-23-23在数组b第一位!实验3运行结果:101103107109113127131137139149151157163167173179181191193197199实验4运行结果:2357111317192329313741434753596167717379838997101103107109113127131137139149151157163167173179181191193197199211223227229233239241251257263269271277281283293307311313317331337347349353359367373379383389397401409419421431433439443449457461463467479487491499503509521523541547557563569571577587593599601607613617619631641643647653659661673677683691701709719727733739743751757761769773787797809811821823827829839853857859863877881883887907911919929937941947953967971977983991997实验5运行结果:X=3Y=2Z=1五.实验感想通过本次从实验对java语言的基本语法有了基本了解,学会了使用控制台命令行的方式运行java程序。实验二面向对象程序设计一.实验目的通过编程和上机实验,掌握类和构造方法的定义及创立对象的方法,掌握类的封装及继承原那么,正确使用重载和覆盖等多态概念设计可复用方法,熟悉包、接口的使用方法,掌握面向对象的程序设计方法。二.实验内容1、编写MyDate类,完善上次实验中的人员信息录入,实现日期合法性判断,包括大小月和闰年。2、声明一个Person类和派生类Student,成员变量包括学号、姓名、入学时间、身份证号、学分绩点等信息,成员方法包括开户、存款、取款、查询〔余额、明细〕、销户等操作。3、定义接口Shape及其抽象方法getArea()和getPerimeter()用于计算图形和面积和周长。定义类Rectangle(矩形)、类Circle(圆形)、类Triangle(三角形),要求这些类继承点类Coordinates()并实现接口的抽象方法。提示:classCoordinates{longx;longy;Coordinate(longx,longy){this.x=x;this.y=y;}}4、包的定义和使用创立自定义包Mypackage在存放源程序的文件夹中建设一个子文件夹Mypackage。例如,在“E:\java\程序〞文件夹之中创立一个与包同名的子文件夹Mypackage〔E:\java\程序\Mypackage〕,并将编译过的class文件放入该文件夹中。注意:包名与文件夹名大小写要一致。再添加环境变量classpath的路径,例如:E:\j2sdk1.4.2_01\lib;E:\java\程序在包中创立类YMD.java程序功能:在源程序中,首先声明使用的包名Mypackage,然后创立YMD类,该类具有计算今年的年份并输出一个带有年月日的字符串的功能。编译Test_YMD.java文件,然后将Test_YMD.class文件存放到Mypackage文件夹中。编写使用包Mypackage中Test_YMD类的程序YMD_2.java程序功能:给定某人姓名与出生日期,计算该人年龄,并输出该人姓名,年龄,出生日期。程序使用了Test_YMD的方法来计算年龄。三.实验步骤实验1代码如下:MyDate类:publicclassMyDate{ privateintyear; //年 privateintmonth; //月 privateintday; //日 publicMyDate(){ this(1903,1,1); } publicMyDate(MyDateother){ this(other.year,other.month,other.day); } publicMyDate(intyear,intmonth,intday){ this.year=year; this.month=month; this.day=day; } publicstaticintgetDaysOfMonth(intyear,intmonth){ switch(month){ case1:case3:case5:case7:case8:case10:case12:return31; case4:case6:case9:case11:return30; case2:returnMyDate.isLeapYear(year)?29:28; default:returnInteger.MIN_VALUE;//错误 } } publicbooleanisValidDate(){ returnMyDate.isValidDate(this.year,this.month,this.day); } publicvoidsetMyDate(intyear,intmonth,intday){ this.year=year; this.month=month; this.day=day; } publicintgetYear(){ returnyear; } publicintgetMonth(){ returnmonth; } publicintgetDay(){ returnday; } publicstaticbooleanisValidDate(intyear,intmonth,intday){ if(day>MyDate.getDaysOfMonth(year,month)){ returnfalse; } returntrue; } publicstaticbooleanisLeapYear(intyear){ returnyear%400==0||year%100!=0&&year%4==0; }publicstaticvoidmain(Stringargs[]){ intsel,y,m,d; Scannerin=newScanner(System.in); while(true){ System.out.println("请输入年月日:"); y=in.nextInt(); m=in.nextInt(); d=in.nextInt(); if(MyDate.isValidDate(y,m,d)){ System.out.println(y+"年"+m+"月"+d+"日"+"信息正确!"); }else{ System.out.println(y+"年"+m+"月"+d+"日"+"信息不正确!"); } System.out.println("是否继续输入(1:是,0:否)"); sel=in.nextInt(); if(sel==0)break; } }}实验2以最终学生信息管理系统为准实验3代码如下:Shape接口:publicinterfaceShape{ publicabstractdoublegetArea(); publicabstractdoublegetPerimeter();}Rectangle类:publicclassRectangleimplementsShape{ privatedoublewidth; privatedoubleheight; privateCoordinatec;//矩形左下角的点 publicRectangle(){ this.width=0; this.height=0; this.c=newCoordinate(0,0); } publicRectangle(doublewidth,doubleheight,intx,inty){ this.width=width; this.height=height; this.c=newCoordinate(x,y); } @Override publicdoublegetArea(){ returnthis.width*this.height; } @Override publicdoublegetPerimeter(){ return2*(this.width+this.height); }}Circle类publicclassCircleimplementsShape{ privatedoubleradius; privateCoordinatecenter; publicCircle(){ this.radius=0; this.center=newCoordinate(0,0); } publicCircle(doubleradius,longx,longy){ this.radius=radius; this.center=newCoordinate(x,y); } @Override publicdoublegetArea(){ returnMath.PI*this.radius*this.radius; } @Override publicdoublegetPerimeter(){ return2*Math.PI*this.radius; }}Triangle类publicclassTriangleimplementsShape{ privatedoublea,b,c; privateCoordinatec1,c2,c3; publicTriangle(){ this.a=0; this.b=0; this.c=0; this.c1=newCoordinate(0,0); this.c2=newCoordinate(0,0); this.c3=newCoordinate(0,0); } @Override publicdoublegetArea(){ doubles=this.getPerimeter()/2; returnMath.sqrt(s*(s-a)*(s-b)*(s-c)); } @Override publicdoublegetPerimeter(){ returnthis.a+this.b+this.c; } publicstaticbooleanisVaild(doublea,doubleb,doublec){ if(a+b<=c||a+c<=b||b+c<=a){ returnfalse; } if(Math.abs(a-b)>=c||Math.abs(a-c)>=b||Math.abs(b-c)>=a){ returnfalse; } returntrue; }}测试类publicclasstest3{ publicstaticvoidmain(String[]args){ Shapeshape; Scannerin=newScanner(System.in); System.out.println("请输入矩形的宽、高,左下角点的横坐标、纵坐标:"); shape=newRectangle(in.nextDouble(),in.nextDouble(),in.nextInt(),in.nextInt()); System.out.println("矩形的面积:"+shape.getArea()+"周长"+shape.getPerimeter()); System.out.println("请输入圆的半径,圆心的横坐标、纵坐标:"); shape=newCircle(in.nextDouble(),in.nextInt(),in.nextInt()); System.out.println("圆形的面积:"+shape.getArea()+"周长"+shape.getPerimeter()); doublea,b,c; System.out.println("请输入三角形的三条边长:"); a=in.nextDouble();b=in.nextDouble();c=in.nextDouble(); while(!Triangle.isVaild(a,b,c)){ System.out.println("这不是一个三角形,请重新输入三条边长:"); a=in.nextDouble();b=in.nextDouble();c=in.nextDouble(); } System.out.println("请分别输入三个顶点的横坐标、纵坐标:"); shape=newTriangle(a,b,c,in.nextInt(),in.nextInt(),in.nextInt(),in.nextInt(),in.nextInt(),in.nextInt()); System.out.println("三角形的面积:"+shape.getArea()+"周长"+shape.getPerimeter()); }}实验4代码如下:详细的调试和运行结果实验1运行结果:请输入年月日:200112562001年12月56日信息不正确!是否继续输入〔1:是,0:否〕1请输入年月日:19002291900年2月29日信息不正确!是否继续输入〔1:是,0:否〕0实验2以最终学生信息管理系统为准实验3运行结果:请输入矩形的宽、高,左下角点的横坐标、纵坐标:78910矩形的面积:56.0周长30.0请输入圆的半径,圆心的横坐标、纵坐标:234圆形的面积:12.566370614359172周长12.566370614359172请输入三角形的三条边长:345请分别输入三个顶点的横坐标、纵坐标:458548三角形的面积:6.0周长12.0实验4运行结果:五.实验感想通过本次从实验对java语言的基本语法有了更深刻的了解,对java中类的定义和面向对象的设计有了基本的了解。实验三异常处理程序设计实验目的了解Java中异常处理〔exception〕的作用及常用的异常类,掌握异常处理的设计方法。实验内容1、用try-catch-finally构造实现异常处理。编译并运行程序,写出程序运行结果。2、设计一个Java程序,自定义异常类,从命令行〔键盘〕输入一个字符串,如果该字符串值为“XYZ〞,那么抛出一个异常信息“ThisisaXYZ〞,如果从命令行输入ABC,那么没有抛出异常。〔只有XYZ和ABC两种输入〕。3、声明一个Average接口,其中约定求平均值的方法;声明多个类实现Average接口,分别给出求平均值的方法实现。例如,在一组数值中,一种算法是,全部数值相加后求平均值,另一种算法是,去掉一个最高分和一个最低分后,再将总分求平均等;使用键盘输入数据时,对于不能转换成数值的字符串进展异常处理。三.实验步骤实验1代码如下:publicclassExceptionTest{ publicstaticvoidmain(String[]args){ inti=0; Stringgreeting[]={"Hello","Only","Test"}; while(i<4){ try{ System.out.println(greeting[i]); }catch(ArrayIndexOutOfBoundsExceptione){ System.out.println("数组越界"); }finally{ System.out.println("总会运行"); } i++; } }}实验2代码如下:importjava.util.Scanner;publicclassMyExceptionextendsException{ privatestaticfinallongserialVersionUID=1L; Stringinformation; publicMyException(){ rmation=this.toString(); } publicMyException(Strings){ rmation=s; } publicStringgetString(){ rmation; } publicstaticvoidmain(String[]args){ intsel; Stringinput; Scannerin=newScanner(System.in); while(true){ try{ input=in.next(); if(input.equals("XYZ")){ thrownewMyException("ThisisaXYZ"); } }catch(MyExceptione){ System.out.println(e.getString()); }finally{ System.out.print("是否继续输入(1:是,0:否)"); sel=in.nextInt(); if(sel==0)break; } } }}实验3以最终学生信息管理系统为准详细的调试和运行结果实验1运行结果:Hello总会运行Only总会运行Test总会运行数组越界总会运行实验2运行结果:请输入XYZ或ABC:ABC是否继续输入〔1:是,0:否〕:1请输入XYZ或ABC:XYZThisisaXYZ是否继续输入〔1:是,0:否〕:0实验感想通过本次实验对java的异常处理机制有了很深的了解。实验四图形用户界面程序设计1.实验目的:掌握组件的使用方法,理解委托事件处理模型。熟悉图形用户界面基本组件的使用方法,熟悉如何使用布局管理器对组件进展管理及如何使用Java的事件处理机制。实验内容:输入一个整数,分别显示其百位、十位和个位数字,图形用户界面如图4.1所示。要求:整数文本行可编辑且能实现事件处理,当输入数据错误时,处理异常,弹出对话框,提示重新输入信息;其他文本行仅用于显示不可编辑。源代码:packagesy4;importjava.awt.FlowLayout;importjava.awt.Label;importjava.awt.TextField;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;importjavax.swing.JButton;importjavax.swing.JFrame;importjavax.swing.JOptionPane;publicclassMineframeextendsJFrameimplementsActionListener{staticTextFieldT=newTextField(20);staticTextFieldT1=newTextField(20);staticTextFieldT2=newTextField(20);staticTextFieldT3=newTextField(20);publicMineframe() {super("Displaythenumberofintegers");this.setSize(300,140);this.setLocation(300,240);this.setLayout(newFlowLayout());this.add(newLabel("整数"));this.add(T);this.add(newLabel("百位"));T1.setEditable(false);this.add(T1);this.add(newLabel("十位"));T2.setEditable(false);this.add(T2);this.add(newLabel("个位")); T3.setEditable(false);this.add(T3); JButtonbutton=newJButton("确定");this.add(button);button.addActionListener(this);this.setResizable(true);this.setDefaultCloseOperation(EXIT_ON_CLOSE);this.setVisible(true);T.addActionListener(this); }publicvoidactionPerformed(ActionEvente)throwsNumberFormatException{try { Stringstr=T.getText(); intnum=Integer.parseInt(str);intt1,t2,t3;t1=num/100;t2=(num/10)%10;t3=(num%100)%10;T1.setText(String.valueOf(t1));T2.setText(String.valueOf(t2));T3.setText(String.valueOf(t3)); }catch(NumberFormatExceptionnfe) { JOptionPane.showMessageDialog(this,"不能转换为整数"); }finally {Stringstr=T.getText(); intnum=Integer.parseInt(str);intt1,t2,t3;t1=num/100;t2=(num/10)%10;t3=(num%100)%10;T1.setText(String.valueOf(t1));T2.setText(String.valueOf(t2));T3.setText(String.valueOf(t3)); }}publicstaticvoidmain(Stringargs[]){newMineframe();}}实验结果:模拟实现一个可视化的简单计算器,至少提供进展加法、减法、乘法、除法等基本运算的功能,希望能支持加正负号、求平方根、清零等其他功能。源代码:packagesy4;importjava.awt.*;importjavax.swing.*;importjavax.swing.event.*;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;publicclassCounterextendsJFrameimplementsActionListener//,WindowListener {privateJTextFieldtext;privateJButton[]button;privateMessageJDialogjdialog;staticStringope=""; //标记操作数staticStringflag=""; //标记运算符号privatestaticStringnumber=""; //number用来表示当前数字staticdoublesave=0,result=0,num=0; //save保存前一值,result为结果,num用来记录小数点个数 Stringoperation[]={"sqrt","+/-","backspace","C","7","8","9","/","4","5","6","*","1","2","3","-","0",".","=","+"};publicCounter() {super("计算器");button=newJButton[operation.length];this.setBounds(280,100,300,240);this.setDefaultCloseOperation(EXIT_ON_CLOSE); JPanelpanel=newJPanel(newFlowLayout());this.getContentPane().add(panel); JPanelpanelR=newJPanel(newGridLayout(1,1)); //设置text文本框panel.add(panelR);text=newJTextField("0",6);panelR.add(text); JPanelpanelID[]=newJPanel[5]; //设置按钮for(inti=0;i<operation.length;i++){if(i%4==0) //四个键为一行 {panelID[i/4]=newJPanel(newGridLayout(1,4));panel.add(panelID[i/4]); }button[i]=newJButton(operation[i]);//这里是按钮的布局button[i].addActionListener(this);panelID[i/4].add(button[i]); }this.setVisible(true);jdialog=newMessageJDialog(this); }publicvoidactionPerformed(ActionEvente) {if(e.getSource()==button[16]) //"0" { if(ope=="") {if(!text.getText().equals("0")) {number=text.getText()+"0";text.setText(number); }else { text.setText("0"); } }else {ope="";text.setText("0"); }if(flag=="")save=Double.parseDouble(text.getText()); }if(e.getSource()==button[12]) //"1" {if(ope=="") {if(!text.getText().equals("0")) {number=text.getText()+"1";text.setText(number); }else { text.setText("1"); } }else {ope="";text.setText("1"); }if(flag=="")save=Double.parseDouble(text.getText()); }if(e.getSource()==button[13]) //"2", {if(ope=="") {if(!text.getText().equals("0")) {number=text.getText()+"2";text.setText(number); }else { text.setText("2"); } }else {ope="";text.setText("2"); }if(flag=="")save=Double.parseDouble(text.getText()); }if(e.getSource()==button[14]) //"3" {if(ope=="") {if(!text.getText().equals("0")) {number=text.getText()+"3";text.setText(number); }else { text.setText("3"); } }else {ope="";text.setText("3"); }if(flag=="")save=Double.parseDouble(text.getText()); }if(e.getSource()==button[8]) //"4" {if(ope=="") {if(!text.getText().equals("0")) {number=text.getText()+"4";text.setText(number); }else { text.setText("4"); } }else {ope="";text.setText("4"); }if(flag=="")save=Double.parseDouble(text.getText()); }if(e.getSource()==button[9]) //"5" {if(ope=="") {if(!text.getText().equals("0")) {number=text.getText()+"5";text.setText(number); }else { text.setText("5"); } }else {ope="";text.setText("5"); }if(flag=="")save=Double.parseDouble(text.getText()); }if(e.getSource()==button[10]) //"6" {if(ope=="") {if(!text.getText().equals("0")) {number=text.getText()+"6";text.setText(number); }else { text.setText("6"); } }else {ope="";text.setText("6"); }if(flag=="")save=Double.parseDouble(text.getText()); }if(e.getSource()==button[4]) //"7" {if(ope=="") {if(!text.getText().equals("0")) {number=text.getText()+"7";text.setText(number); }else { text.setText("7"); } }else {ope="";text.setText("7"); }if(flag=="")save=Double.parseDouble(text.getText()); }if(e.getSource()==button[5]) //"8" {if(ope=="") {if(!text.getText().equals("0")) {number=text.getText()+"8";text.setText(number); }else { text.setText("8"); } }else {ope="";text.setText("8"); }if(flag=="")save=Double.parseDouble(text.getText()); }if(e.getSource()==button[6]) //"9" {if(ope=="") {if(!text.getText().equals("0")) {number=text.getText()+"9";text.setText(number); }else { text.setText("9"); } }else {ope="";text.setText("9"); }if(flag=="")save=Double.parseDouble(text.getText()); }if(e.getSource()==button[0]) //"sqrt" {doubled=Double.parseDouble(text.getText());d=Math.sqrt(d);text.setText(""+d);if(flag=="")save=d; }if(e.getSource()==button[1]) {doubled=Double.parseDouble(text.getText());d=0-d;text.setText(""+d);if(flag=="")save=d; }if(e.getSource()==button[2]) {save=0;ope="";flag="";text.setText(""); }if(e.getSource()==button[3]) //"C" {num=0;text.setText(""); }if(e.getSource()==button[19]) //"+" {flag="+";ope="+";text.setText("+");num=0; }if(e.getSource()==button[15]) //"-" {flag="-";ope="-";text.setText("-");num=0; }if(e.getSource()==button[11]) //"*" {flag="*";ope="*";text.setText("*");num=0; }if(e.getSource()==button[7]) //"/" { flag="/";ope="/";text.setText("/");num=0; }if(e.getSource()==button[17]) //"." { Stringstr=text.getText()+".";text.setText(str); }if(e.getSource()==button[18]) //"=" {if(flag.equals("+")) {result=save+Double.parseDouble(text.getText());text.setText(""+result); }if(flag.equals("-")) {result=save-Double.parseDouble(text.getText());text.setText(""+result); }if(flag.equals("*")) {result=save*Double.parseDouble(text.getText());text.setText(""+result); }if(flag.equals("/")) {result=save/Double.parseDouble(text.getText());text.setText(""+result); }save=result; //进展连续运算num=0;flag="";ope="="; } }privateclassMessageJDialogextendsJDialog { JFramejframe; JLabeljlabel; MessageJDialog(JFramejframe) {super(jframe,"提示",true);this.jframe=jframe;this.setSize(240,100);jlabel=newJLabel("",JLabel.CENTER);this.getContentPane().add(jlabel);this.setDefaultCloseOperation(HIDE_ON_CLOSE); }voidshow(Stringmessage) {jlabel.setText(message);this.setLocation(jframe.getX()+30,jframe.getY()+70);this.setVisible(true); } } }publicstaticvoidmain(Stringargs[]) {newCounter(); } }实验结果:设计图形界面实现学生的信息录入,至少包括姓名、年龄、出生年月日、Java课程实验成绩,成绩使用浮点数,年龄使用整型,使用数据存储输入对象,程序输出按年龄排序的学生信息。源代码:packagesy4;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;importjavax.swing.JButton;importjavax.swing.JFrame;importjavax.swing.JLabel;importjavax.swing.JPanel;importjavax.swing.JScrollPane;importjavax.swing.JTable;importjavax.swing.JTextField;publicclassSframeextendsJFrameimplementsActionListener{privateJTextFieldT1,T2,T3,T4;privateJButtonbutton,button2;privateJTabletable;intnum=10;Stringa[]=newString[num];Stringb[]=newString[num];Stringc[]=newString[num];Stringd[]=newString[num];intk=0;publicSframe(){super("学生信息管理");this.setBounds(300,240,740,400);this.setDefaultCloseOperation(EXIT_ON_CLOSE); JPanelpanel=newJPanel();this.getContentPane().add(panel,"North");panel.add(newJLabel("姓名"));T1=newJTextField(6);panel.add(T1);panel.add(newJLabel("年龄"));T2=newJTextField(6);panel.add(T2);panel.add(newJLabel("出生日期"));T3=newJTextField(6);panel.add(T3);panel.add(newJLabel("分数"));T4=newJTextField(6);panel.add(T4);button=newJButton("确定");panel.add(button);button.addActionListener(this);button2=newJButton("排序");panel.add(button2);button2.addActionListener(this); actionPerformed(null);this.getContentPane().add(newJScrollPane(table));this.setVisible(true);}publicvoidactionPerformed(ActionEvente){ Stringtitles[]={"姓名","年龄","出生日期","成绩"}; Objectdatas[][]=newObject[num][4]; a[k]=T1.getText();b[k]=T2.getText();c[k]=T3.getText();d[k]=T4.getText();if(k<9)k++;for(inti=0;i<k;i++) {datas[i][0]=a[i];datas[i][1]=b[i];datas[i][2]=c[i];datas[i][3]=d[i]; }table=newJTable(datas,titles);this.getContentPane().add(newJScrollPane(table));this.setVisible(true);}publicstaticvoidmain(Stringargs[]) { newSframe();}}实验结果:实验五多线程程序设计实验目的:理解多线程的概念,掌握创立、管理和控制Java线程对象的方法,包括创立Java线程对象、改变线程状态、设置线程优先级及控制线程调度等方法,掌握实现线程互斥和线程同步的方法。实验内容:编写一个有两个线程的程序,第一个线程用来计算2~1000之间的偶数及个数,第二个线程用来计算1000~2000之间的偶数及个数。源代码:publicclassEven_CountextendsThread{ privateintfirst; privateintcount; publicEven_Count(Stringname,intfirst){//起始数字 super(name); this.first=first; count=0; } publicEven_Count(Stringname){ this(name,0); } publicvoidrun(){//run方法中根据起始数字的不同执行不同的操作 System.out.print(this.getName()+":"); if(first==2){ for(inti=first;i<=1000;i+=2){ System.out.print(i+""); count++; } System.out.println(this.getName()+"完毕,2~1000之间的偶数个数为:"+count); } if(first==1000){ for(inti=first;i<=2000;i+=2){ System.out.print(i+""); count++; } System.out.println(this.getName()+"完毕,1000~2000之间的偶数个数为:"+count); } } publicstaticvoidmain(String[]args){ System.out.println("currentThread="+Thread.currentThread().getName()); Even_Counteven1=newEven_Count("2~1000之间的偶数",2);//初始化线程对象 Even_Counteven2=newEven_Count("1000~2000之间的偶数",1000); even1.start();//线程开场 even2.start(); System.out.println("activeCount="+Even_Count.activeCount()); } }结果:2、编写一个Java应用程序,在主线程中再创立两个线程,要求线程经历四种状态:新建,运行、中断和死亡。按模板要求,将【代码1】~【代码8】替换为Java程序代码。源代码:packagesy5;classRabitextendsThread{intsleepTime=0,liveLength=0;publicRabit(Stringname,intsleepTime,intliveLength){super(name);this.sleepTime=sleepTime;this.liveLength=liveLength;}publicvoidrun(){while(true){liveLength--; System.out.println("*_*");try{sleep(sleepTime);}catch(InterruptedExceptione){}if(liveLength<=0){System.out.println(getName()+"进入死亡状态\n"); break;}}}}classTortoiseextendsThread{intsleepTime=0,liveLength=0;publicTortoise(Stringname,intsleepTime,intliveLength){super(name); this.sleepTime=sleepTime;this.liveLength=liveLength;}publicvoidrun(){while(true){liveLength--;System.out.println("@_@");try{sleep(sleepTime);//让线程调用sleep()方法进入中断状态}catch(InterruptedExceptione){}if(liveLength<=0){System.out.println(getName()+"进入死亡状态\n");break;}}}}publicclassThreadExample{publicstaticvoidmain(Stringa[]){Rabitrabit;rabit=newRabit("Rabit",100,3);//新建线程rabitTortoisetortoise=newTortoise("Tortoise",100,3);//新建线程tortoisetortoise.start();rabit.start();}}结果:3、编写一个Java应用程序,在主线程中创立三个线程:zhangWorker,wangWorker和boss。线程zhangWorker和wangWorker分别负责在命令行输出“搬运苹果〞和“搬运香蕉〞,这两个线程分别各自输出20行,每输出一行信息就准备休息10秒钟,但是boss线程负责不让zhangWorker和wangWorker休息。按模板要求,将【代码1】~【代码8】替换为Java程序代码。源代码:packagesy5;classShopimplementsRunnable{ThreadzhangWorker,wangWorker,boss;publicShop(){boss=newThread(this);//创立boss,Shop对象为boss目标对象zhangWorker=newThread(this);//创立zhangWorker,Shop对象为boss目标对象wangWorker=newThread(this);//创立wangWorker,Shop对象为boss目标对象boss.setName("老板");zhangWorker.setName("张工");wangWorker.setName("王工");}publicvoidrun(){ //System.out.println("1");inti=0;if(Thread.currentThread()==zhangWorker){while(true){try{i++;System.out.printf("\n%s已搬运了%d箱苹果\n",zhangWorker.getName(),i);if(i==20)return;zhangWorker.sleep(10000);//zhangWorker休眠10秒〔10000毫秒〕}catch(InterruptedExceptione){System.out.printf("\n%s让%s继续工作",boss.getName(),zhangWorker.getName(),i);}}}elseif(Thread.currentThread()==wangWorker){while(true){try{i++;System.out.printf("\n%s已搬运了%d箱香蕉\n",wangWorker.getName(),i);if(i==20)return;wangWorker.sleep(10000);}catch(InterruptedExceptione){System.out.printf("\n%s让%s继续工作",boss.getName(),wangWorker.getName(),i);}}}elseif(Thread.currentThread()==boss){while(true){zhangWerrupt();//吵醒zhangWorkerwangWerrupt();//吵醒wangWorkerif(!(wangWorker.isAlive()||zhangWorker.isAlive())){System.out.printf("%n%s下班",boss.getName());return;}}}}}publicclassShopExample

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论