收藏 分销(赏)

java上机实验答案与解析.doc

上传人:仙人****88 文档编号:11890788 上传时间:2025-08-18 格式:DOC 页数:19 大小:141.04KB 下载积分:10 金币
下载 相关 举报
java上机实验答案与解析.doc_第1页
第1页 / 共19页
java上机实验答案与解析.doc_第2页
第2页 / 共19页


点击查看更多>>
资源描述
JAVA上机实验题答案与解析 实验一 Java程序编程 1. 编写一个Java应用程序,输出内容为Hello!。 注:文件位置位于e:\2:\Hello.java 编译:(1)e:(2)cd 2 (3)javac Hello.java(4)java Hello 2.编写一个Java小应用程序,输出内容为我一边听音乐,一边学Java。 第一步编写 import java.awt.*; import java.applet.*; public class MyApplet extends Applet{ public void paint(Graphics g){ g.drawString("我一边听音乐,我一边做java",25,25); } } 第二步 在DOS环境中编译(....javac MyApplet.java) 第三步 使用记事本编写 <applet code=MyApplet.class height=200 width=120> </applet> 第四步 将记事本文件名命名为MyApplet.html 第五步 打开MyApplet.html 实验二 类的定义 1.编写Java应用程序,自定义Point类,类中有两个描述坐标位置的double变量x,y,利用构造方法,实现对Point 对象p1,p2初始化,p1和p2对应坐标分别为(15,20),(10,30);定义方法getX(),getY()分别获得点的横坐标和纵坐标;定义方法setX(),setY()分别获得点的横坐标和纵坐标;并且把p1和p2输出; public class Point { double x,y; Point(double x,double y){ this.x=x; this.y=y; } double getX(){ return x; } double getY(){ return y; } void setX(double x){ this.x=x; } void setY(double y){ this.y=y; } public static void main(String[] args) { Point p1=new Point(15,20);//初始化 Point p2=new Point(10,30); System.out.println("横坐标为"+p1.x+" 纵坐标为"+p1.y); System.out.println("横坐标为"+p2.getX()+" 纵坐标为 "+p2.getY()); } } 运行结果:横坐标为15.0 纵坐标为20.0 横坐标为10.0 纵坐标为 30.0 2.编写Java应用程序,自定义Circle类,类中有两个double 变量r,s,一个类变量pi,利用构造方法实现对半径是3和5.5的初始化,自定义getArea方法实现圆面积求解; public class Circle { double s,r; static double pi=3.14159265; public Circle(double r){ this.r=r; } double getArea(){ this.s=pi*r*r; return s; } public static void main(String[] args) { Circle c1=new Circle(3); Circle c2=new Circle(5.5); System.out.println(c1.getArea ()); System.out.println(c2.getArea()); } } 实验三 类的继承和多态性 1.(1)编写一个接口ShapePara,要求: 接口中的方法: int getArea():获得图形的面积。int getCircumference():获得图形的周长 (2)编写一个圆类Circle,要求:圆类Circle实现接口ShapePara。 该类包含有成员变量: radius:public 修饰的double类型radius,表示圆的半径。 x:private修饰的double型变量x,表示圆心的横坐标。 y:protected修饰的double型变量y,表示圆心的纵坐标。 包含的方法有: Circle(double radius) 有参构造方法。以形参表中的参数初始化半径,圆心为坐标原点。 double getRadius():获取半径为方法的返回值。void setCenter(double x, double y):利用形参表中的参数设置类Circle的圆心坐标。void setRadius(double radius):利用形参表中的参数设置类Circle的radius域。 在主方法中产生半径为5的圆。 interface ShapePara { double getArea(double r); double getCircumference(double r); }//注: Circle是在接口中建立的calss,即先建立接口,在建立接口的类 class Circle implements ShapePara{ private double x; protected double y; public double r; Circle(double r){ this.r=r; } void setRadius(double r){ this.r=r; } double getRadius(){ return r; } double getArea(){ return (3.14*r*r); } double getCircumference(){ return 3.14*2*r; } void setCenter(double x,double y){ this.x=x; this.y=y; } double getCenterx(){ return x; } double getCentery(){ return y; } } public class A { public static void main(String[] args) { Circle ci=new Circle(5); ci.setRadius(5); ci.setCenter(0, 0); System.out.println(ci.getArea()); System.out.println(ci.getCircumference()); System.out.println(ci.getCenterx()); System.out.println(ci.getCentery()); } }答案:78.5 31.400000000000002 0.0 0.0 2.定义图形类Shape,该类中有获得面积的方法getArea();定义长方形类Rect,该类是Shape的子类,类中有矩形长和宽的变量double a,double b,设置长和宽的方法setWidth()、setHeight(),使用getArea()求矩形面积;利用getArea方法实现题1中圆面积的求解。 class Shape { double getArea(double r){ return 0; } } public class Rect extends Shape { double a,b,area; Rect(double width,double heigh){ a=width; b=height;; } void setWidth(double width) { a=width; } void setHeight(double height) { b=height; } double getWidth(){ return a; } double getHeight(){ return b; } double getArea(){ area=a*b; return area; } } public class A { public static void main(String args[]) { Rect rect=new Rect(); double w=12.76,h=25.28; rect.setWidth(w); rect.setHeight(h); System.out.println("矩形对象的宽:"+rect.getWidth()+" 高:"+rect.getHeight()); System.out.println("矩形的面积:"+rect.getArea()); } } 答案: 圆的的面积:78.5 矩形对象的宽:12.76 高:25.28 矩形的面积:322.57280000000003 3. 编写Java应用程序,定义Animal类,此类中有动物的属性:名称 name,腿的数量legs,统计动物的数量 count;方法:设置动物腿数量的方法 void setLegs(),获得腿数量的方法 getLegs(),设置动物名称的方法 setKind(),获得动物名称的方法 getKind(),获得动物数量的方法 getCount()。定义Fish类,是Animal类的子类,统计鱼的数量 count,获得鱼数量的方法 getCount()。定义Tiger类,是Animal类的子类,统计老虎的数量 count,获得老虎数量的方法 getCount()。定义SouthEastTiger类,是Tiger类的子类,统计老虎的数量 count,获得老虎数量的方法 getCount()。 public class Animal { String name; int legs; static int count; Animal(){count++;} void setLegs(int legs){ this.legs=legs; } int getLegs(){ return legs; } void setKind(String name){ this.name=name; } String getKind(){ return name; } int getCount(){ return count; } } public class Fish extends Animal{ static int countFish; Fish(){countFish++;} int getCount(){ return countFish; } } public class Tiger extends Animal{ static int countTiger; Tiger(){countTiger++;} int getCount(){ return countTiger; } } public class SouthEastTiger extends Tiger{} public class A { public static void main(String args[]){ Fish f=new Fish(); System.out.println(f.getCount()); Tiger t=new Tiger(); System.out.println(t.getCount()); SouthEastTiger st=new SouthEastTiger(); System.out.println(st.getCount()); } } 实验四 异常处理 1.建立exception包,编写TestException.java程序,主方法中有以下代码,确定其中可能出现的异常,进行捕获处理。 for(inti=0;i<4;i++){ intk; switch(i){ case0:intzero=0;k=911/zero;break; case1:intb[]=null;k?=b[0];break; case2:int c[]=new int[2];k=c[9];break; case3:charch="abc".charAt(99);break; } } package Exception; public class TestException { public static void main(String[] args){ for(int i=0;i<4;i++){ try{ int k; switch(i){ case 0: int zero=0;k=911/zero;break; case 1: int b[]=null;k=b[0];break; case 2: int c[]=new int[2];k=c[9];break; case 3: char ch="abc".charAt(99);break; } } catch(ArithmeticException e){ System.out.println(e.getMessage()); } catch(java.lang.NullPointerException e){ System.out.println(e.getMessage()); } catch(ArrayIndexOutOfBoundsException e){ System.out.println(e.getMessage()); } catch(java.lang.StringIndexOutOfBoundsException e){ System.out.println(e.getMessage()); } } } } 运行结果: / by zero null 9 String index out of range: 99 2.建立exception包,建立Bank类,类中有变量double balance表示存款,Bank类的构造方法能增加存款,Bank类中有取款的发方法withDrawal(double dAmount),当取款的数额大于存款时,抛出InsufficientFundsException,取款数额为负数,抛出NagativeFundsException,如new Bank(100),表示存入银行100元,当用方法withdrawal(150),withdrawal(-15)时会抛出自定义异常。 提示: InsufficientFundsException,NagativeFundsException为自定义的类,分别产生余额不足异常和取款为负数异常,需继承Exception类。 通过输出结果了解java异常的产生,并将该Java程序放在exception包中。 package Exception;//注解先建立一个package,然后在包中建立各种类 public class InsufficientFundsException extends Exception{ String s1; InsufficientFundsException(String t){ s1=t; } public String getMassage1(){ return s1; } } package Exception; public class NagativeFundsException extends Exception{ String s; NagativeFundsException(String t){ s=t; } public String getMassage(){ return s; } } package Exception; public class Bank extends Exception{ static double ba=0; Bank(double r){ ba=ba+r; } void withDrawal(double dAmount) throws InsufficientFundsException,NagativeFundsException{ if(dAmount>ba) throw new InsufficientFundsException("取款余额不足"); else if(dAmount<0) throw new NagativeFundsException("取款为负数"); else System.out.print("银行里还剩余:"+(ba-dAmount)); } } package Exception; import java.util.*; public class A{ public static void main(String args[] ){ Bank b=new Bank(100); Scanner sc=new Scanner(System.in); try { System.out.println("请输入一个数"); b.withDrawal(sc.nextInt()); } catch(InsufficientFundsException e){ System.out.println(e.getMassage1()); } catch(NagativeFundsException e){ System.out.println(e.getMassage()); } } } 运行结果: 请输入一个数 80 银行里还剩余:20.0 实验五 输入输出 1.编写TextRw.java的Java应用程序,程序完成的功能是:首先向TextRw.txt中写入自己的学号和姓名,读取TextRw.txt中信息并将其显示在屏幕上。 import java.io.*; public class TextRw { public static void main(String[] args) throws IOException { File f=new File("f:\\TextRw.txt"); FileWriter fw=new FileWriter(f); fw.write("学号 姓名"); fw.close(); FileReader fr=new FileReader(f); int i; while((i=fr.read())!=-1) System.out.print((char)i); fr.close(); } } 2.编写IoDemo.java的Java应用程序,程序完成的功能是:首先读取IoDemo.java源程序文件,再通过键盘输入文件的名称为iodemo.txt,把IoDemo.java的源程序存入 import java.io.*; public class TextRw { public static void main(String[] args) throws IOException{ String f="e:\\hello.java"; FileReader r=new FileReader(f); int i; while((i=r.read())!=-1){ System.out.print((char)i); } r.close(); BufferedReader w=new BufferedReader(new InputStreamReader(System.in)); System.out.print("请目录和输入文本名"); String f1=w.readLine(); FileWriter w1=new FileWriter(f1); FileReader r1=new FileReader(f); int j; while((j=r1.read())!=-1){ w1.write((char)j); } w1.close(); } } 运行结果:public class Hello{ public static void main(String[] args){ System.out.println("hello"); } }请目录和输入文本名e:\\Hello.text 且会在e目录下产生Hello.text 3.编写BinIoDemo.java的Java应用程序,程序完成的功能是:完成1.doc文件的复制,复制以后的文件的名称为自己的学号姓名.doc。 import java.io.*; public class BinIoDemo{ public static void main(String[] args) throws IOException{ File f1=new File("e:\\1.doc"); FileInputStream in=new FileInputStream(f1); File f2 = new File("e:\\“学号”+“姓名”.doc"); FileOutputStream out=new FileOutputStream(f2); byte[] buf = new byte[2048]; int num = in.read(buf); while (num != (-1)) { out.write(buf, 0, num); out.flush(); num = in.read(buf); } in.close(); out.close(); } } 实验六 多线程编程 1.随便选择两个城市作为预选旅游目标。实现两个独立的线程分别显示10次城市名,每次显示后休眠一段随机时间(1000ms以内),哪个先显示完毕,就决定去哪个城市。分别用Runnable接口和Thread类实现。 通过Thread public class Hw1Thread extends Thread{ String a; private int sleepTime; public Hw1Thread(String a){ super(a); this.a=a; sleepTime=(int)(Math.random()*6000); } public void run(){ int count1=0,count2=0; if(Thread.currentThread().getName().equalsIgnoreCase("ShangHai")){ for(int i=0;i<10;i++){ System.out.println(a); try{ Thread.sleep(sleepTime); count1++; if(count1>count2 && count1==10){ //判断哪个城市的输出次数先达到10,达到则终止输出 System.out.println("I decide to go to shanghai!");break; } else if(count2>count1 && count2==10){ System.out.println("I decide to go to BeiJing!");break; //判断哪个城市的输出次数先达到10,达到则终止输出 } } catch(InterruptedException exception){};//使用sleep方法需要抛出中断异常 } } if(Thread.currentThread().getName().equalsIgnoreCase("BeiJIng")){ for(int i=0;i<10;i++){ System.out.println(a); try{ Thread.sleep(sleepTime); count2++; if(count1>count2 && count1==10){ System.out.println("I decide to go to shanghai!");break; } else if(count2>count1 && count2==10){ System.out.println("I decide to go to BeiJing!");break; } } catch(InterruptedException exception){};//使用sleep方法需要抛出中断异常 (也可以在方法头抛出(throw)异常) } } } } public class Hw1ThreadText { public static void main(String[] args) throws InterruptedException { Hw1Thread td1=new Hw1Thread("ShangHai"); Hw1Thread td2=new Hw1Thread("BeiJing"); td1.start(); td2.start(); } } 通过Runnable接口: public class Hw1Thread implements Runnable{ String a; private int sleepTime; int count1=0,count2=0; public Hw1Thread(String a){ this.a=a; sleepTime=(int)(Math.random()*1000); } public void run(){ //重写run方法 if(Thread.currentThread().getName().equalsIgnoreCase("td1")){ for(int i=0;i<10;i++){ System.out.println("ShangHai"); try{ Thread.sleep(sleepTime); count1++; } catch(InterruptedException exception){}; //使用sleep方法需要抛出中断异常 if(count1>count2 && count1==10){ System.out.println("I decide to go to BeiJing!");break; } else if(count2>count1 && count2==10){ System.out.println("I decide to go to ShangHai!");break; } } } if(Thread.currentThread().getName().equalsIgnoreCase("td2")){ for(int i=0;i<10;i++){ System.out.println("BeiJing"); try{ Thread.sleep(sleepTime); count2++; if(count1>count2 && count1==10){ //判断哪个城市的输出次数先达到10,达到则终止输出 System.out.println("I decide to go to shanghai!");break; } else if(count2>count1 && count2==10){ System.out.println("I decide to go to BeiJing!");break; //判断哪个城市的输出次数先达到10,达到则终止输出 } catch(InterruptedException exception){};//使用sleep方法需要抛出中断异常 } } } } public class Hw1ThreadText { public static void main(String[] args) throws InterruptedException { Hw1Thread td1=new Hw1Thread("ShangHai"); Hw1Thread td2=new Hw1Thread("BeiJing"); new Thread(td1,"td1").start(); new Thread(td2,"td2").start(); } } 2.用继承Thread类方法实现多线程程序。有两个学生小明和小红,小明准备睡10分钟以后开始听课,小红准备睡1小时以后开始听课,雷老师大喊三声“上课了”,小明醒后把小红吵醒,他们开始听课。 学生:小明、小红 睡觉:明:10min 红:60min 老师:喊三声 明醒->红醒。 上课。 class Stu extends Thread{ Thread student1,student2,teacher; Stu() { teacher=new Thread(this); student1=new Thread(this); student2=new Thread(this); teacher.setName("雷老师"); student1.setName("小明"); student2.setName("小红"); } public void run() { if(Thread.currentThread()==student1) { try{ System.out.println(student1.getName()+"正在睡觉"); Thread.sleep(1000*60*10); } catch(InterruptedException e) { System.out.println(student1.getName()+"被老师叫醒了"); } System.out.println(student1.getName()+"开始听课"); } if(Thread.currentThread()==student2) { try{ System.out.println(student2.getName()+"正在睡觉"); Thread.sleep(1000*60*60); } catch(InterruptedException e) { System.out.println(student2.getName()+"被小明叫醒了"); } System.out.println(student2.getName()+"开始听课"); } else if(Thread.currentThread()==teacher) { for(int i=1;i<=3;i++) { System.out.println("上课!"); try { Thread.sleep(500); } catch(InterruptedException e){} } student1.interrupt(); //吵醒student student2.interrupt(); } } } public class A{ public static void main(String args[]) { Stu s=new Stu(); s.student1.start(); s.student2.start(); s.teacher.start
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 通信科技 > 开发语言

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服