资源描述
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
展开阅读全文