NJUPT JAVA第四次实验1
JAVA实用教程(第4版)实验1实验报告
实验一:一个简单的应用程序
1.实验要求:
编写一个简单的Java应用程序,该程序在命令行窗口输出两行文字:“你好,欢迎学习Java”和“We are students”。
2.实验内容:
3.实验后的练习:
(1)编译器怎样提示丢失大括号的错误
(2)编译器怎样提示语句丢失分号的错误
(3)编译器怎样提示将System写成system这一错误
(4)编译器怎样提示将String写成string这一错误
实验二:联合编译
1.实验要求:
编写4个源文件:MainClass.java,A.java,B.java和 C.java,每个源文件只含有一个类。
MainClass.java含有应用程序的主类(含有main()方法),并使用了A,B和C类。
将4个源文件保存到同一目录中,然后编译MainClass.java。
2.实验内容:
3.实验后的练习:
将Hello.java编译通过以后,不断地修改A.java源文件中的代码,比如在命令行窗口输出Nice to meet you或Can you need my hand。
要求每次修改A.java源文件后,单独编译A.java,然后直接运行应用程序Hello。
南昌大学java实验报告4
南昌大学实验报告学生姓名:学号:专业班级:网络工程091实验类型:□验证□综合□设计□创新实验日期:2012.5.18 实验成绩:实验四简单的万年历一、实验目的学习使用布局类。
二、实验任务编写一个应用程序,有一个窗口,该窗口为BorderLayout布局。
窗口的中心添加一个Panel容器:pCenter,pCenterd的布局是7行7列的GridLayout布局,pCenter中放置49个标签,用来显示日历。
窗口的北面添加一个Panel容器pNorth,其布局是FlowLayout布局,pNorth放置两个按钮:nextMonth和previousMonth,单击nextMonth按钮,可以显示当前月的下一月的日历;单击previousMonth按钮可以显示当前月的上一月的日历。
窗口的南面添加一个Panel容器pSouth,起布局是FlowLayout,pSouth中放置一个标签用来显示一些信息。
三、实验内容编译并运行程序,查看结果。
程序如下:CalendarFRame.javapackage calendar;import java.awt.BorderLayout;import java.awt.Button;import java.awt.GridLayout;import bel;import java.awt.Panel;import java.awt.ScrollPane;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import javax.swing.JFrame;public class CalendarFrame extends JFrame implements ActionListener { Label labelDay[]=new Label[42];Button titleName[]=new Button[7];String name[]={"日","一","二","三", "四","五","六"};Button nextMonth,previousMonth;int year=2012,month=5;CalendarBean calendar;Label showMessage=new Label("",Label.CENTER);public CalendarFrame(){Panel pCenter=new Panel();pCenter.setLayout(new GridLayout(7,7));//将pCenter的布局设置为7行7列的GridLayout 布局。
java第四次实验报告
this.year = year;
this.day = day;
}
public void ChangeToDate(Date1 date) {
String Month[] =
{
"January","Februry","March", "April", "May","June",
{"drove","jumped","ran","walked","skiped"},
{"to","from","over","'under","on"},
{"the","a","one","some","any"},
{"boy","girl","dog","town","car"} };
TextArea output;
Button m;
int b,c;
public void init() {
output=new TextArea(25,50);
m=new Button("开始");
add(output);
add(m);
}
public boolean action(Event e,Object o){
output.setText ("");
JAVA第四次试验
实验五、抽象类和接口一、定义一个包pack1,定义一个接口ClassName,接口中只有一个抽象方法getClassName()。
设计一个类Horse,该类实现接口ClassName中的方法getClassName(),功能是获取该类的类名。
编写应用程序使用Horse类。
源程序如下:package pack1;interface ClassName{void getClassName();}class Horse implements ClassName{public void getClassName(){System.out.println("Horse");}}public class TestHorse {public static void main(String[] args) {Horse h = new Horse();h.getClassName();}}运行结果如下:--------------------Configuration: <Default>-------------------- HorseProcess completed.二、定义一个包pack2,定义一个抽象基类Shape,它包含一个抽象方法getArea(),从Shape类派生出Rectangle和Circle类,这两个类都用getArea()方法计算对象的面积。
编写编写应用程序使用Rectangle类和Circle类。
源程序如下:package pack2;abstract class Shape{public abstract void getArea();}class Rectangle extends Shape{private float x,y;Rectangle(float x,float y){this.x = x;this.y = y;}public void getArea(){System.out.println(x*y);}}class Circle extends Shape{private float r;private final float PI=3.14f;Circle(float r){this.r = r;}public void getArea(){System.out.println(r*r*PI);}}public class TestShape {public static void main(String[] args) {Rectangle r = new Rectangle(3.0f,4.0f);Circle c = new Circle(2.0f);r.getArea();c.getArea();}}运行结果如下:--------------------Configuration: <Default>-------------------- ng.NoSuchMethodError: mainException in thread "main"Process completed.三、设计雇员Employee类,记录雇员的情况,包括姓名、年薪、受雇时间,要求定义MyDate类作为受雇时间,其中包括工作的年、月、日,并用相应的方法对Employee类进行设置。
java4次实验
if(ID==this.ID) return this.score; else return -1; } public static void main(String[] args) { Student s=new Student(); s.SetRecord(0,"alex",100); float Sco=s.getRecord(0); System.out.print(Sco); } }
import javax.swing.JApplet;//引入类 JApplet import javax.swing.JLabel;//引入标签类 JLabel public class HelloWorldApplet extends JApplet{
public void init(){ System.out.println("init Applet");
for(i=0;i<=10;i++) System.out.println(10+i+"的平方值"+a[i]); } public static void main(String args[]) { printSquare(); } }
实验二 类与对象 实验目的 1、 掌握面向对象程序设计的方法和 Java 作为面向对象程序设计语言的特点; 2、 掌握修饰符和构造方法的使用规则; 3、 掌握接口的特点、结构、调用和继承; 4、 掌握如何创建包,通过包如何管理类; 5、 掌握 Java 的继承机制和实现多态的方法 实验内容 1 定义一个类 Student,属性为学号、姓名和成绩;方法为增加记录 SetRecord 和得到记录 GetRecord。SetRecord 给出学号、姓名和成绩的赋值,GetRecord 通过学号得到考生的成绩。
安徽工业大学java实验报告
JAVA实验报告实验1:利用JAVA反射技术分析类结构实验内容:运行程序,指定一个要分析的类名称,如ng.Double,输出类中声明的属性、方法、构造函数等。
结果分析:1.分析程序运行时的输出结果。
输出的结果中显示了被分析类的方法与变量,包括这些方法与变量的修饰符2.分析与JAVA反射技术相关的几个类的作用:ng.reflect.Constructor;Constructor 提供关于类的单个构造方法的信息以及对它的访问权限。
ng.reflect.Field;Field 提供有关类或接口的单个字段的信息,以及对它的动态访问权限。
反射的字段可能是一个类(静态)字段或实例字段。
ng.reflect.Method;Method 提供关于类或接口上单独某个方法(以及如何访问该方法)的信息。
所反映的方法可能是类方法或实例方法(包括抽象方法)。
ng.reflect.Modifier;Modifier 类提供了 static 方法和常量,对类和成员访问修饰符进行解码。
修饰符集被表示为整数,用不同的位位置 (bit position) 表示不同的修饰符。
定义一个自己的类,如Employee类,定义几个属性、方法、构造函数,要求成员的属性包含Public、Private、Protected、Static等。
运行该程序分析一下你自己定义的类结构。
class Employee{public String name ;public String id;private int age ;static protected int salary =100;Employee()}private void Employee(String xm,String bh,int nl){name=xm;id=bh;age=nl;}protected double Employee(int gz){return gz+salary;}}分析:先调用一个无参数的构造函数构造,然后再调用该构造函数private void Employee(String xm,String bh,int nl)构造一个对象,最后调用构造函数计算总的薪水。
新版软基第四次上机实验报告-新版-精选.pdf
else i=hftree[i].rch;
if(hftree[i].lch==0)
6/7
{ cout<<code[i].ch; i=m;
} cin>>b; } } void main() { creathuffmantree(); huffcode(); trancode(); cout<<endl; } 三、测试数据 因比较复杂,我们直接看结果吧 四、上机遇到的问题 调试时遇到问题;解决办法:问同学 五、实际运行结果
s1=s2=32767;
for(j=1;j<=i-1;j++)
if(hftree[j].parent==0)
if(hftree[j].weight<s1)
{
s2=s1;
s1=hftree[j].weight;
p2=p1;
p1=j;
}
else if(hftree[j].weight<s2)
{s2=hftree[j].weight;p2=j;}
if(t->lc!=NULL) postorder(t->lc);
if(t->rc!=NULL) postorder(t->rc);
printf("%d\n",t->data); } } void preorder(bnode *t) { if(t==NULL) {
printf("the tree is null!\n"); return; } else { printf("%d\n",t->data); if(t->lc!=NULL)
西安邮电大学JAVA实验(3,4)
第三次线程实验:一. 实验目的及实验环境实验目的:1.理解JA V A中线程的同步和死锁2.掌握线程同步和互斥实验环境:eclipse 4.4二. 实验内容编程实现隧道通车问题。
内容如下:有一条隧道,同时允许一辆车通行,隧道两端各有多辆车等待通过,车辆只能等到隧道空闲才能被运行进入隧道。
一旦隧道中有车辆,则禁止其他车辆通过。
三.方案设计1.定义类Test,Car,CarType,Tunnel类2.在Test类中创建一个隧道Tunnel和多个车辆,观察结果四.测试数据及运行结果1.正常测试数据(3组)及运行结果;2.非正常测试数据(2组)及运行结果。
无五.总结1.实验过程中遇到的问题及解决办法;①中没有明确表示需要进行异常抛出很有可能就会忘记这个题目存在的问题。
所以平常程序设计时,应该多考虑不同的情况,防止程序出现不可逆的漏洞。
②对程序进行同步时,notify()方法会唤醒等待队列中的随机的一个线程,而notifyAll()方法会唤醒等待队列中的全部线程2.对设计及调试过程的心得体会。
①Java中的每个对象都有一个lock,当访问某个对象的synchronized方法时,该对象就会被上锁(注意,是对象,不是方法,假如你在这个类中定义了多个方法,如果你的线程访问到了其中的任意一个synchronized方法,那么其它的就暂时不能被访问了,必须等到该对象被解锁以后,即方法执行结束才行)。
解锁的意思是值线程执行该方法完毕,或者说过程中抛出了异常。
②wait,notify,notifyAllwait:Object类中的final方法,有InterruptedException。
它的作用是导致当前的线程等待,直到其它线程调用此对象的notify方法或者notifyAll方法,wait还有一些重用方法,传参数,比如说时间长度。
当前的线程必须拥有此对象监视器,然后该线程发布对此监视器的所有权并且开始等待,直到其它线程通过调用notify方法或者notifyAll方法,通知在此对象的监视器上等待的线程醒来,然后该线程将等到重新获得对监视器的所有权后才能开始执行。
JAVA实验4-1答案
广东海洋大学学生实验报告书(学生用表)实验名称实验四(1). 类与对象(第1部分)课程名称Java程序设计与开发技术课程号16232204学院(系) 信息学院专业计算机科学与技术班级计科1131学生姓名彭德权学号201311621124 实验地点钟海楼04019实验日期2015年9月24日一、实验目的(1)学习使用Java中的类来封装对象的属性和功能;(2)学习掌握Java中对象的组合及参数传递。
二、实验任务完成实验三指导上实验1、实验2的实验任务。
三、实验仪器设备和材料安装有J2SE开发工具的PC机。
四、实验内容和步骤实验1 机动车编写一个Java应用程序,改程序中有两个类:Vehicle(用于刻画机动车)和User (主类)。
具体要求如实验指导所示。
代码如下:Vehicle.javapublic class Vehicle{private double speed;private int power;void speedUp(int s){this.speed=this.speed+s;}void speedDown(int s){this.speed=this.speed-s;}void setPower(int p){this.power=p;}int getPower(){return this.power;}double getSpeed(){return this.speed;}}User.javapublic class User{public static void main(String args[]){Vehicle car1,car2;GDOU-B-11-112car1=new Vehicle();car2=new Vehicle();car1.setPower(128);car2.setPower(76);System.out.println("car1的功率是:"+car1.getPower());System.out.println("car2的功率是:"+car2.getPower());car1.speedUp(80);car2.speedUp(80);System.out.println("car1目前的速度:"+car1.getSpeed());System.out.println("car2目前的速度:"+car2.getSpeed());car1.speedDown(10);car2.speedDown(20);System.out.println("car1目前的速度:"+car1.getSpeed());System.out.println("car2目前的速度:"+car2.getSpeed());}}运行结果:课后的练习(1)改进speedUp()方法,使得Vehicle类的对象加速时不能将speed值超过200。
JAVA程序设计基础实验四
实验报告四一【实验目的】(1)理解异常和异常处理的概念(2)理解异常处理机制二【实验内容】【项目一】理解异常处理机制1.编写以下程序,并编译运行3.使用try{}catch{}final{}结构,捕获并处理异常,在final里中打印输出:public class Ex7_1{public static void main(String[] args){try{String output[]={"The","quick","brown","fox","jumps","over","the","lazy","dog."};int i=0;while(i<12){System.out.print(output[i++]);}}catch(Exception e){System.out.print("haha...");}finally{System.out.println("不管怎样都要执行的语句!");}}}【项目二】完成实验指导书——5.2.4 异常处理(1)程序代码class NoLowerLetter extends Exception{public void print(){System.out.printf("%c",'#');}}class NoDigit extends Exception{public void print(){System.out.printf("%c",'*');}}class People{----------------------------精品word文档值得下载值得拥有----------------------------------------------void printLetter(char c) throws NoLowerLetter{if(c<'a'||c>'z'){NoLowerLetter noLowerLetter=new NoLowerLetter();throw noLowerLetter;}else{System.out.print(c);}}void printDigit(char c) throws NoDigit{if(c<'1'||c>'9'){NoDigit noDigit=new NoDigit();throw noDigit;}else{System.out.print(c);}}}public class ExceptionExample{public static void main (String args[]){People people=new People();for(int i=0;i<128;i++){try{people.printLetter((char)i);}catch(NoLowerLetter e){e.print();}}for(int i=0;i<128;i++){try{people.printDigit((char)i);}catch(NoDigit e){e.print();}}}}(2)运行结果【项目三】使用Thread创建线程,要求及部分源码见附件/线程/1~6.jpgclass Tortoise extends Thread{int sleepTime=0,liveLength=0;Tortoise(int sleepTime,String name,int liveLength){this.sleepTime=sleepTime;this.liveLength=liveLength;setName("乌龟");}public void run(){while(true){liveLength--;----------------------------精品word文档值得下载值得拥有----------------------------------------------System.out.printf("@");try{Thread.sleep(80);}catch(InterruptedException e){}if(liveLength<=0){System.out.printf(getName()+"进入死亡状态\n");return;//结束run()方法的语句;}}}}class Rabbit extends Thread{int sleepTime=0,liveLength;Rabbit(int sleepTime,String name,int liveLength){this.sleepTime=sleepTime;this.liveLength=liveLength;setName("兔子");}public void run(){while(true){liveLength--;System.out.printf("*");try{Thread.sleep(50);}//让线程调用sleep()方法进入中断状态,sleepTime毫秒后线程重新排队,等待CUP资源;catch(InterruptedException e){}if(liveLength<=0){System.out.printf(getName()+"进入死亡状态\n");return;//结束run()方法的语句;}}}}public class ThreadExample{public static void main(String args[]){String s1="兔子",s2="乌龟";Rabbit rabit;rabit=new Rabbit(50,s1,50);//新建线程rabit;Tortoise tortoise;tortoise=new Tortoise(20,s2,70);//新建线程tortoise;rabit.start();//启动线程tortoisetortoise.start();//启动线程rabit;}}【项目四】使用Rannable接口创建线程class Bank implements Runnable{private int money=100;----------------------------精品word文档值得下载值得拥有----------------------------------------------Thread zhang,keven;Bank(){String s1="会计",s2="出纳";zhang=new Thread(this);zhang.setName(s1);keven=new Thread(this);keven.setName(s2);}public void run(){int i=0;//声明一个int类型变量i,初值为0;while(true){if(Thread.currentThread().getName().equals("会计")){i=i+1;money=money+1;System.out.printf("%s将money的值改为%d\t",zhang.getName(),money);System.out.printf("%s的局部变量i=%d\n",zhang.getName(),i);if(i>=6){System.out.printf("%s线程进入死亡状态\n",zhang.getName());return;}try{Thread.sleep(1000);}catch(InterruptedException e){}}else if(Thread.currentThread().getName().equals("出纳")){i=i-1;money=money-1;System.out.printf("\n%s将money的值改为%d\t",keven.getName(),money);System.out.printf("%s的局部变量i=%d\n",keven.getName(),i);if(i<=-6){System.out.printf("%s线程进入死亡状态\n",keven.getName());return;}try{Thread.sleep(1000);}catch(InterruptedException e){}}}}}public class BankExample{public static void main(String args[]){Bank bank=new Bank();bank.zhang.start();bank.keven.start();}}----------------------------精品word文档值得下载值得拥有----------------------------------------------三【实验小结】本次实验是这么课程的第四次实验,通过前几次的实验让我对Java的学习有了更深一步的了解,这次实验主要练习的是线程和异常,仍然主要是利用了类的创建,在做实验的过程中,第一步编译的时候还是会出现许多错误,根据错误的地方提示再一步一步的进行修改。
Java实验四报告
一、实验目的1.掌握Java语言中继承和多态的相关概念2.掌握Java程序设计中继承和多态机制的使用3.掌握Java语言中接口和包的概念及使用。
二、实验内容1.题目:1.继承多态综合练习1(1)建立一个Java抽象类Drink,应当:①声明一个抽象方法taste(),该方法负责输出饮料的味道;②声明int型常量来代表不同的饮料类型(咖啡、啤酒、牛奶),如:③声明静态方法getDrink(int drinkType),根据传入的参数创建不同的饮料对象,并返回该对象,建议使用switch语句。
(2)建立Drink的子类:①分别建立Drink的子类:Coffee(咖啡类),Beer(啤酒类),Milk(牛奶类);②实现taste()方法,要求在控制台打印各自的味道特征。
(3)建立Test测试类,测试以上内容的正确性①编写main方法,输入要新建的饮料类型。
②调用Drink类的getDrink方法,获得相应的饮料对象。
然后调用该饮料对象的taste()方法,输出该饮料的味道。
②编译程序,并运行。
要求:测试类放在包名为com.sy4.exe02.test包中,其它类放在com.sy4.exa02包中。
(知识点:类的定义,抽象类,继承,多态)2.继承多态综合应用练习2(1)定义一个抽象的People类,有姓名(name),年龄(age),性别(sex)等成员变量,要求成员变量的访问修饰符为private,通过getXxx()和setXxx()方法对各变量进行读写。
声明具有一个抽象的role()方法,该方法不返回任何值,用于输出人的身份类型,同时至少定义两个构造方法。
(2)定义一个抽象类Employee类,该类继承People类,该类具有People类的所有成员,并新增雇员底薪薪水(salary)和职工编号(empid)成员变量。
同样要有至少两个构造方法,要体现出this和super的几种用法。
声明具有一个抽象的getSalary()方法,该方法返回float 值,用于返回员工薪水。
软件测试lab4--使用mujava进行变异测试
软件测试lab4--使⽤mujava进⾏变异测试软件测试技术第四次实验报告⼀、需求分析(描述具体需求)1. 安装MuJava。
2. 根据给定的两个⼩程序使⽤MuJava⽣成对应的变异体。
3. 使⽤Junit给两个程序编写测试集。
4. 使⽤MuJava和测试集测试这些变异体。
⼆、概要设计(简单描述设计思路,配合UML图)1. 设计思路⾸先安装mujava.jar,openjava.jar和junit.jar等需要⽤到的包,在进⾏环境变量的配置,⽣成需要的变异体。
接着编写对应的测试集,再对这些变异体进⾏测试。
三、详细设计(详细描述具体如何实现,附代码及说明)1. 安装MuJava。
将下载好的jar包添加到环境变量中,在CLASSPATH中添加这些jar包的路径,结果如下图所⽰:新建⼀个mujava.config⽂件,并在其中写⼊MuJava_HOME的地址,该地址为新建的MujavaHome的地址。
再新建两个命令脚本⽂件,GenMutants.cmd和RunTest.cmd,在其中分别写⼊如下图所⽰的内容。
2. ⽣成变异体。
先在MujavaHome⽂件夹中新建四个⽂件夹,分别是src,classes,result,testset。
在src⽂件夹中放⼊两个给定的源程序,在classes⽂件夹中放⼊两个源程序在eclipse中编译⽣成的class⽂件。
点击运⾏GenMutants.cmd⽂件,弹出如下图形界⾯,并勾选上所有的变异算⼦。
点击‘Generate’按钮,⽣成变异体,下图分别是BackPack和BubbleSort的变异体:其中,只⽣成了method级别的变异体,没有class级别的变异体。
⽣成变异体后,可以在result⽂件夹内找到⽣成的变异体⽂件。
3. 编写测试⽤例。
(1) backpack的测试⽤例:import org.junit.Assert;import org.junit.After;import org.junit.Before;import org.junit.Test;public class testBackPack {private BackPack c;@Beforepublic void setUp() throws Exception {// setUp()⽤于测试前的初始化c = new BackPack();}@Testpublic void test2() {int m = 10;int n = 3;int w[] = {3, 4, 5};int p[] = {4, 5, 6};int a[][] = {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},{0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4},{0, 0, 0, 4, 5, 5, 5, 9, 9, 9, 9},{0, 0, 0, 4, 5, 6, 6, 9, 10, 11, 11}};Assert.assertArrayEquals(a,c.BackPack_Solution(m, n, w, p)); }@Afterpublic void tearDown() throws Exception {// tearDown()⽤于测试后的善后c = null;}}(2) bubblesort的测试⽤例:import static org.junit.Assert.*;import java.util.Arrays;import org.junit.After;import org.junit.Before;import org.junit.Test;public class testBubbleSort {private BubbleSort c;@Beforepublic void setUp() throws Exception {// setUp()⽤于测试前的初始化c = new BubbleSort();}@Testpublic void test1() {int a[] = new int[]{1,6,2,2,5};int b[]=new int[]{2,2,2,1,2,13};int a1[] = new int[]{1,2,2,5,6};int b1[]=new int[]{1,2,2,2,2,13};assertEquals(Arrays.toString(a1), Arrays.toString(c.BubbleSort(a)));assertEquals(Arrays.toString(b1), Arrays.toString(c.BubbleSort(b)));}@Afterpublic void tearDown() throws Exception {// tearDown()⽤于测试后的善后c = null;}}4. 对变异体进⾏测试。
西电JAVA第四次上机作业实验报告
JAVA第四次上机作业实验报告一、上机内容Java GUI编程实验编写程序,利用JTextField和JPasswordField分别接收用户输入的用户名和密码,并对用户输入的密码进行检验。
对于每个用户名有三次密码输入机会。
要求:1、所有用户名和密码信息都预先存放在文件passwords.txt中,使用文件流读入;2、当三次密码输入均错误时,弹出模式化对话框阻塞窗口,并在对话框关闭时同时关闭窗口。
二、上机分析1、组件定义及界面显示内容:public class Login {private JFrame frame;private JLabel label1;private JLabel label2;private JLabel label3;private JPasswordField jf;private JTextField jt;private JButton yes;private JButton no;private int i=0;public Login(){frame=new JFrame("用户登陆");label1=new JLabel("西电芝麻开门");label2=new JLabel(" 用户名:");label3=new JLabel("密码:");jf=new JPasswordField(15);jt=new JTextField(15);yes=new JButton("登录");no=new JButton("取消");init();addEventHandler();}2、界面格局设计:public void init(){JPanel north=new JPanel();JPanel center=new JPanel();JPanel south=new JPanel();north.setLayout(new FlowLayout());center.setLayout(new FlowLayout(2));south.setLayout(new FlowLayout());north.add(label1);center.add(label2);center.add(jt);center.add(label3);center.add(jf);south.add(yes);south.add(no);frame.setLayout(new BorderLayout());frame.add(north,BorderLayout.NORTH);frame.add(center,BorderLayout.CENTER);frame.add(south,BorderLayout.SOUTH);}public void showMe(){label1.setFont(new Font("隶体",Font.BOLD,16));frame.setLocation(600, 400);frame.setSize(250,200);frame.setResizable(false);//不能改变窗口大小frame.setVisible(true);//frame.pack();//设置窗口为最适尺寸frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}3、操作后显示设计当三次密码输入均错误时,弹出模式化对话框阻塞窗口,并在对话框关闭时同时关闭窗口。
JAVA程序设计基础实验四
实验报告四课程JA V A程序设计实验项目异常与线程成绩学号XXXXXX姓名XXXX实验日期2012.10.17专业班级计算机科学与技术09级指导教师XXXXX一【实验目的】(1)理解异常和异常处理的概念(2)理解异常处理机制二【实验内容】【项目一】理解异常处理机制1.编写以下程序,并编译运行3.使用try{}catch{}final{}结构,捕获并处理异常,在final里中打印输出:public class Ex7_1{public static void main(String[] args){try{String output[]={"The","quick","brown","fox","jumps","over","the","lazy","dog."};int i=0;while(i<12){System.out.print(output[i++]);}}catch(Exception e){System.out.print("haha...");}finally{System.out.println("不管怎样都要执行的语句!");}}}【项目二】完成实验指导书——5.2.4 异常处理(1)程序代码class NoLowerLetter extends Exception{public void print(){System.out.printf("%c",'#');}}class NoDigit extends Exception{public void print(){System.out.printf("%c",'*');}}class People{void printLetter(char c) throws NoLowerLetter{if(c<'a'||c>'z'){NoLowerLetter noLowerLetter=new NoLowerLetter(); throw noLowerLetter;}else{System.out.print(c);}}void printDigit(char c) throws NoDigit{if(c<'1'||c>'9'){NoDigit noDigit=new NoDigit();throw noDigit;}else{System.out.print(c);}}}public class ExceptionExample{public static void main (String args[]){People people=new People();for(int i=0;i<128;i++){try{people.printLetter((char)i);}catch(NoLowerLetter e){e.print();}}for(int i=0;i<128;i++){try{people.printDigit((char)i);}catch(NoDigit e){e.print();}}}}(2)运行结果【项目三】使用Thread创建线程,要求及部分源码见附件/线程/1~6.jpgclass Tortoise extends Thread{int sleepTime=0,liveLength=0;Tortoise(int sleepTime,String name,int liveLength){this.sleepTime=sleepTime;this.liveLength=liveLength;setName("乌龟");}public void run(){while(true){liveLength--;System.out.printf("@");try{Thread.sleep(80);}catch(InterruptedException e){}if(liveLength<=0){System.out.printf(getName()+"进入死亡状态\n");return;//结束run()方法的语句;}}}}class Rabbit extends Thread{int sleepTime=0,liveLength;Rabbit(int sleepTime,String name,int liveLength){this.sleepTime=sleepTime;this.liveLength=liveLength;setName("兔子");}public void run(){while(true){liveLength--;System.out.printf("*");try{Thread.sleep(50);}//让线程调用sleep()方法进入中断状态,sleepTime 毫秒后线程重新排队,等待CUP资源;catch(InterruptedException e){}if(liveLength<=0){System.out.printf(getName()+"进入死亡状态\n");return;//结束run()方法的语句;}}}}public class ThreadExample{public static void main(String args[]){String s1="兔子",s2="乌龟";Rabbit rabit;rabit=new Rabbit(50,s1,50);//新建线程rabit;Tortoise tortoise;tortoise=new T ortoise(20,s2,70);//新建线程tortoise;rabit.start();//启动线程tortoisetortoise.start();//启动线程rabit;}}【项目四】使用Rannable接口创建线程class Bank implements Runnable{private int money=100;Thread zhang,keven;Bank(){String s1="会计",s2="出纳";zhang=new Thread(this);zhang.setName(s1);keven=new Thread(this);keven.setName(s2);}public void run(){int i=0;//声明一个int类型变量i,初值为0;while(true){if(Thread.currentThread().getName().equals("会计")){ i=i+1;money=money+1;System.out.printf("%s将money的值改为%d\t",zhang.getName(),money);System.out.printf("%s的局部变量i=%d\n",zhang.getName(),i);if(i>=6){System.out.printf("%s线程进入死亡状态\n",zhang.getName());return;}try{Thread.sleep(1000);}catch(InterruptedException e){}}else if(Thread.currentThread().getName().equals("出纳")){i=i-1;money=money-1;System.out.printf("\n%s将money的值改为%d\t",keven.getName(),money);System.out.printf("%s的局部变量i=%d\n",keven.getName(),i);if(i<=-6){System.out.printf("%s线程进入死亡状态\n",keven.getName());return;}try{Thread.sleep(1000);}catch(InterruptedException e){}}}}}public class BankExample{public static void main(String args[]){Bank bank=new Bank();bank.zhang.start();bank.keven.start();}}三【实验小结】本次实验是这么课程的第四次实验,通过前几次的实验让我对Java的学习有了更深一步的了解,这次实验主要练习的是线程和异常,仍然主要是利用了类的创建,在做实验的过程中,第一步编译的时候还是会出现许多错误,根据错误的地方提示再一步一步的进行修改。
JAVA第四,五,六次PTA作业总结
JAVA第四,五,六次PTA作业总结⼀、前⾔第⼆阶段的JAVA⼤作业与第⼀阶段的作业相⽐,其难度⼤⼤提⾼,知识点也更加贴合⾯向对象的使⽤。
在本阶段,将会更加深⼊学习⾯向对象的思想,⽤更加合理的⽅式完成相应的功能。
此阶段也是极具挑战性的⼀个阶段,相⽐于上⼀阶段这⼀阶段实属有些磕磕绊绊,但是也同时学到不少新的东西,对⾯向对象也有了更深刻的了解。
⼆、作业概况第四次作业第四次作业的题⽬分别是:7-1 ⽔⽂数据校验及处理7-2 ⽇期问题⾯向对象设计(聚合⼀)7-3 图形继承运⽤知识点:正则表达式的运⽤正则表达式对输⼊数据进⾏合法性校验Java中类的聚合关系的使⽤⽅法类的继承与封装构造⽗类和⼦类,并使⽤this及super等关键字题⽬难度:第五次作业总共分为三道题题,第⼀题是⽔⽂数据校验及处理,对于这道题也是这次作业中最难的题,开始看这道题的时候内⼼复杂,因为这道题的题⽬⼜是⼀个⽂件,这⽂件中写的全是这道题的要求还有过程。
这是我学Java以来接触的最长的题⽬。
看了很久才知道⼤概过程,然后花了很久的时间才渐渐写出了⼤概过程,但是当时我还是不怎么会正则表达式,⽽且题⽬过程太复杂中间⼀些没考虑好的地⽅也很多,所以最后,还是没做出来;后⾯两题分别是类的聚合和图形继承也就⽗类⼦类的运⽤,除了聚合相对多花点时间调试做出来还是⼗分顺利的。
第五次作业第五次作业的题⽬分别是:7-5 ⽇期问题⾯向对象设计(聚合⼆)7-4 统计Java程序中关键词的出现次数7-2 合并两个有序数组为新的有序数组7-3 对整型数据排序运⽤知识点:类的聚合的运⽤但是使Year、Month、Day与DateUtil的聚合关系发⽣变化。
⽤数组存储⽉份天数。
使⽤Set和List或Map等接⼝正则表达式判断数据简单的数组排序输出题⽬难度:第⼀题和上⼀次作业类的聚合类似但是Year、Month、Day与DateUtil的聚合关系发⽣变化,之前的求前n天和后n天的函数进⾏了修改,个⼈感觉有点繁琐;第⼆题难度较⾼⽽且还运⽤了正则表达式以及map等接⼝的运⽤,⼗分复杂,处理学习和同学讨论了许久才解决;后⾯两题为简单的数组排序题,很好解决。
南昌大学Java实验指导书
Java语言程序设计实验指导目录实验1:Java开发环境的熟悉 (3)实验2:Java程序设计 (5)实验3:类与对象 (7)实验4:继承与多态 (9)实验5:图形用户界面编程 (12)实验6:Java中的多线程 (14)实验1 Java开发环境的熟悉一、实验目的1、掌握下载Java SDK 软件包、EditPlus 编辑软件的方法;2、掌握设置Java 程序运行环境的方法;3、掌握编写与运行Java 程序的方法;4、了解Java 语言的概貌;5、为学习Java 语言和进行Java 程序的实验做好准备工作。
二、实验内容1、SDK 的下载与安装下载能安装在Windows95/98/2000/NT、UNIX和Linux等操作系统类型中的J2SE 系统安装程序。
为了建立基于SDK 的Java 运行环境,需要先下载Sun 的免费SDK 软件包。
SDK 包含了一整套开发工具,其中包含对编程最有用的是Java 编译器、Applet 查看器和Java 解释器。
在浏览器中输入/,可看到Sun 公司网站页面,然后在里面找到下载的链接进行下载就行。
目前的版本最高是Jdk1.5,但是在使用上更多的还是使用Jdk1.4版本。
下载完后进行安装,和一般的软件安装过程差不多,自己选择目录进行sdk的安装。
在本实验中假设sdk的安装路径是“C:\ j2sdk1.4.2_01“。
2、Java运行环境配置SDK 中的工具都是命令行工具,需要从命令行即MS-DOS 提示符下运行它们。
很多人可能会不习惯,但这是Sun 特意采取的策略,为的是把精力更多地投入到Java 语言本身而不是花在开发工具上。
为了能正确方便的使用SDK,可手工配置一些Windows 的环境变量,Windows 98 与Windows/xp/NT/2000 的配置略有不同。
(1)设置Windows 98在C:\autoexec.bat 文件中,添加以下内容:set path=%path%; C:\ j2sdk1.4.2_01\binset classpath=.; C:\ j2sdk1.4.2_01\lib\;%classpath%C:\ j2sdk1.4.2_01\bin 为程序安装路径,如果安装时做了修改,这里必须做出相应的修改。
北邮java智能卡实验报告3des加解密
智能卡技术实验报告学院:电子工程学院班级:2011211204姓名:学号:2011210986实验四 Java卡对称加密解密程序一、实验目的:建立Java卡3DES算法的加密解密程序,并进行Java卡程序的编译和调测。
二、实验设备:PC机,智能卡读卡器,Java卡。
三、实验内容:1.建立一个JavaCard工程2.编写3DES算法的加解密应用代码3.使用智能卡模拟器对应用代码进行调试4.使用Java卡对应用代码进行编译测试四、实验报告:1.设计一个3DES算法的加密解密小应用程序2.画出系统结构图和各部分程序流程图3.完成程序的开发,然后再在Java卡上进行验证五、流程图系统结构流程:各部分流程图1)产生随机明文流程图2)3DES加密流程图3)3DES解密流程图六、演示模拟器随机产生8字节的明文:D4AA3503EC117A56,用时:1113us加密,密文:DCC74C5B43340FB7,用时:8445us解密,用时:6338us插卡产生明文:09FED7DA8FC3B90F,用时:83990us加密,产生密文:A447987D6FF5CC2C,用时:682482us解密,用时:641494us可以看出,插卡后比直接用模拟器,加密解密的时间长了很多。
七、实验总结通过本次智能卡实验,我了解了对称加密的一些相关概念与知识,并学会了如何在智能卡上实现对称加解密。
八、源代码package desthree;import javacard.framework.*;import javacard.security.*;import javacardx.crypto.*;public class Desthree extends Applet{byte [] Random;byte [] ciphertext=new byte[256];byte [] translation=new byte[256];private DESKey deskey;Cipher CipherObj;private byte [] keyData1={0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08};//密钥private byte [] keyData2={0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18};private byte [] keyData3={0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28};protected Desthree(){register();}public static void install(byte [] bArray, short bOffset, byte bLength){new Desthree();}public void process(APDU apdu)throws ISOException{byte [] buffer = apdu.getBuffer();if((buffer[ISO7816.OFFSET_CLA])==0 && (buffer[ISO7816.OFFSET_INS])==(byte)(0xa4))return;if(buffer[ISO7816.OFFSET_INS]==(byte)0x84){getRandom();//返回生成的8字节随机数Util.arrayCopyNonAtomic(Random, (short)0, buffer, (short)0, (short)8);apdu.setOutgoingAndSend((short)0,(short)8);}if(buffer[ISO7816.OFFSET_INS]==(byte)0x83){apdu.setIncomingAndReceive();encrypt(buffer); //加密Util.arrayCopyNonAtomic(ciphertext, (short)16, buffer, (short)0, (short)8);apdu.setOutgoingAndSend((short)0,(short)8);}if(buffer[ISO7816.OFFSET_INS]==(byte)0x82){apdu.setIncomingAndReceive();doAuthentication(buffer); //解密}}//执行加密过程的代码private void encrypt(byte [] buffer){deskey = (DESKey)KeyBuilder.buildKey(KeyBuilder.TYPE_DES,KeyBuilder.LENGTH_DES,false);deskey.setKey(keyData1, (short)0);CipherObj = Cipher.getInstance(Cipher.ALG_DES_CBC_ISO9797_M1, false);CipherObj.init(deskey, Cipher.MODE_ENCRYPT);CipherObj.doFinal(buffer, (short)5, (short)8, ciphertext, (short)0);deskey.setKey(keyData2, (short)0);CipherObj = Cipher.getInstance(Cipher.ALG_DES_CBC_ISO9797_M1, false);CipherObj.init(deskey, Cipher.MODE_DECRYPT);CipherObj.doFinal(ciphertext, (short)0, (short)8, ciphertext, (short)8);deskey.setKey(keyData3, (short)0);CipherObj = Cipher.getInstance(Cipher.ALG_DES_CBC_ISO9797_M1, false);CipherObj.init(deskey, Cipher.MODE_ENCRYPT);CipherObj.doFinal(ciphertext, (short)8, (short)8, ciphertext, (short)16);}//执行解密过程的代码private void doAuthentication(byte [] buffer){deskey = (DESKey)KeyBuilder.buildKey(KeyBuilder.TYPE_DES,KeyBuilder.LENGTH_DES,false);deskey.setKey(keyData3, (short)0);CipherObj = Cipher.getInstance(Cipher.ALG_DES_CBC_ISO9797_M1, false);CipherObj.init(deskey, Cipher.MODE_DECRYPT);CipherObj.doFinal(buffer, (short)5, (short)8, translation, (short)0);deskey.setKey(keyData2, (short)0);CipherObj = Cipher.getInstance(Cipher.ALG_DES_CBC_ISO9797_M1, false);CipherObj.init(deskey, Cipher.MODE_ENCRYPT);CipherObj.doFinal(translation, (short)0, (short)8, translation, (short)8);deskey.setKey(keyData1, (short)0);CipherObj = Cipher.getInstance(Cipher.ALG_DES_CBC_ISO9797_M1, false);CipherObj.init(deskey, Cipher.MODE_DECRYPT);CipherObj.doFinal(translation, (short)8, (short)8, translation, (short)16);if(Util.arrayCompare(translation, (short)16, Random, (short)0, (short)8)!=0)ISOException.throwIt(ISO7816.SW_SECURITY_STATUS_NOT_SATISFIED);}//获取随机数private void getRandom(){if(Random==null)Random = JCSystem.makeTransientByteArray((short)8,JCSystem.CLEAR_ON_DESELECT);RandomData ICC = RandomData.getInstance((byte)RandomData.ALG_PSEUDO_RANDOM);ICC.setSeed(Random, (short)0, (short)8);ICC.generateData(Random, (short)0, (short)8);}}。