Java 实验

更新时间:2024-03-24 12:59:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

Java实验报告

院系:计算机科学与工程学院 专业:网络工程 班级:09003801 姓名:韦莹

学号:0900380127

实验一 Java 开发环境及基本语法

一、实验目的

1、掌握常用的Java 集成开发环境的使用,特别是Eclipse和 NetBeans。 2、掌握Java 基本语法,重点是面向对象的思想和语法。

3、掌握控制台下(应用程序)的输入输出方法,作为后续部分实验的基础。 二、实验内容

1、验证和学习所给的几个例子程序及其讲解。然后自己编写一个至少由一个类构成的Java 程序,其功能是在运行后,能接收用户输入一个学生的姓名以及 java 课的成绩(百分制) ,并输出对该学生成绩是否达到60分的及格分的判断(可使用if语句) 。例如,输入学生姓名李明,然后输入成绩50,则输出“李明的成绩为不及格” 。

2、编写一个程序来表示长方体的长宽高等数据并有计算体积的函数可供调用,长方体类从矩形类继承而来。程序运行时能接受输入任意的 3 个数作为长方体的长、宽和高,然后能够输出所输入的长宽高及所计算出的体积。注意不能把代码全部写在main函数里面,不能直接输出长宽高的乘积。在该程序中,必须尽量多地用到接口的定义、类的定义、成员变量的定义、成员函数的定义、类的继承等面向对象的语法和知识点(越多越好) 。在此基础上熟悉、理解和解释类的封装、继承等概念。 三、实验分析与设计过程

1、使用Scanner类中的方法接收输入,用if语句判断成绩 2、矩形类声明长和宽变量,构造方法初始化变量。长方体类继承矩形类,并调用父类构造方法,创建一个求体积的方法,通过main方法输入数据并输出运行结果 四、测试数据和程序运行结果 1、源程序

import java.util.Scanner; public class Test{ public static void main(String[] args){ String name; int score; Scanner sc=new Scanner(System.in); System.out.print(\输入名字:\ name=sc.next(); System.out.print(\输入成绩:\ score=sc.nextInt(); if(score<60) System.out.println(name+\不及格!\ else System.out.println(name+\及格!\ } }

运行结果:

输入名字:小方 输入名字:小东 输入成绩:90 输入成绩:58 小方及格! 小东不及格!

2、源程序:

package a2;

import java.util.Scanner;

public class Box {

float lenght ; float width ; float height ; //计算体积的函数

public float gettiji(float lenght,float width,float height) { float tiji = 0 ;

tiji = lenght * width * height ; return tiji ; }

public static void main(String[] args) { Box box = new Box() ;

Scanner sc = new Scanner(System.in); System.out.println(\请输入长:\) ; float lenght = sc.nextFloat() ; System.out.println(\请输入宽:\) ; float width = sc.nextFloat() ;

System.out.println(\请输入高:\) ; float height = sc.nextFloat();

System.out.print(\该长方体体积为:\+box.gettiji(lenght, width, height)) ; } }

运行结果: 请输入长:5 请输入宽:7 请输入高:9

长方体的体积为:315 五、问题与总结

掌握控制台的输入与输出方法,输出方法需要导入java.util.Scanner. 调用父类的构造方法的关键字super

实验二 系统类和数组

一、实验目的

1、通过字符串处理类的应用,掌握系统类的使用方法。 2、掌握数组的定义和使用。

3、进一步掌握Java 程序设计的基本过程和基本方法。 二、实验内容 三、实验内容

用字符串输入的方式编写一个简单的通讯录。此通讯录由多条记录构成。每条记录包括一个联系人的姓名、性别、电话、通信地址,并具有查询、增加、修改、删除等功能,且每执行一次功能操作后,可以选择用类似以下的格式,输出通讯录的所有信息记录: 编号 姓名 性别 电话 通信地址 01 张三 男 123456 北京 02 李四 女 456789 福建

此处做一简单的参考性质的提示:可考虑用数组分别存储姓名,性别,电话,通信地址,那么查询,增加、修改、删除操作就可转换为对数组元素的操作。通讯录中的所有记录的每一个字段可以依次可以使用一维数组的各个元素来存放,并进行各项功能操作处理。 但考虑一下,是否也可采用规则的二维数组来处理呢?比如数组的第一维用于对应某条记录(或者说用来表示记录的总数) ,第二维(各个元素)依次用来表示某条具体记录的每个字段。 请发挥自己的思考能力,用自己熟悉的或者觉得更合理的方式来设计程序解决问题,完成该实验。

三、实验分析与设计过程

定义一个表类List,声明几个一维数组,每个数组分别储存一项信息,并在该类中创建查询、增加、修改、删除等方法。定义一个主类,main()方法生成一个List实例,用switch语句进行选择,然后通过实例调用List类的方法 四、测试数据和程序运行结果 源程序:

import java.util.*; public class Tx{ public static void main(String args[]) { list T=new List(); T.input(); T.show(); Scanner sc=new Scanner(System.in); while(true){ System.out.println(\选择:1.查询2.增加3.修改4.删除\ int p=sc.nextInt(); switch(p){ case 1: T.search(); break; case 2: T.add(); break; case 3: T.modify(); break; case 4:

T.delete(); break; default: break; } T.show(); }} }

class List{ int i,n; int number[]=new int[15]; String name[]=new String[15]; String sex[]=new String[15]; String phone[]=new String[15]; String address[]=new String[15]; void input(){ Scanner sc=new Scanner(System.in); number[i]=i+1; System.out.print(\姓名:\ name[i]=sc.next(); System.out.print(\性别:\ sex[i]=sc.next(); System.out.print(\电话:\ phone[i]=sc.next(); System.out.print(\通信地址:\ address[i]=sc.next(); n=i; } void show(){ System.out.println(\编号\\t姓名\\t性别\\t电话\\t地址\ for(i=0;i

t1.setSize(80,30); t1.setLocation(150,100); t2.setSize(80,30); t2.setLocation(150,150); t3.setSize(80,30); t3.setLocation(150,200); b1.setSize(60,30); b1.setLocation(70,250); b2.setSize(60,30); b2.setLocation(160,250); b3.setSize(100,30); b3.setLocation(90,300); f.add(l1);f.add(l2);f.add(l3);f.add(l4); f.add(t1);f.add(t2);f.add(t3); f.add(b1); f.add(b2); f.add(b3); //依次将每个组件添加到容器上 f.setVisible(true); } public void actionPerformed(ActionEvent e) {

//判断输入是否为空 if (e.getSource() == b1) { if(t1.getText().equals(\) || t1.getText().equals(\)){ System.out.println(\请确认输入!\); } else{ try{ a = Double.parseDouble(t1.getText()); b = Double.parseDouble(t2.getText()); t3.setText(Double.valueOf(a+b).toString()); } //异常处理 catch(Exception e1){ System.out.print(\请输入数字!\); } }} else if (e.getSource() == b2) { if(t1.getText().equals(\) || t1.getText().equals(\)){ System.out.println(\请确认输入!\); } else try{ a = Double.parseDouble(t1.getText()); b = Double.parseDouble(t2.getText()); t3.setText(Double.valueOf(a-b).toString());

}

t3.setText(Double.valueOf(a+b).toString()); } catch(Exception e1){ System.out.print(\请输入数字!\); } } else if (e.getSource() == b3) { t1.setText(null); t2.setText(null); t3.setText(null); } }

public static void main(String args[]) { new aa(); //定义对象实例,调用构造函数生成界面 }

运行结果:

五、问题与总结

定义类同时实现接口监听,要在接口方法中实现全部需要监听的方法

实验五 异常

? 实验目的

1、掌握异常的概念、作用、分类和进行异常处理的语法结构。 2、了解系统异常类的体系和系统定义的常见标准异常。 3、掌握用户自定义异常类的定义和抛出异常的方法。

4、通过掌握异常来分析调试程序的编译错误和编写更健壮的程序 二、实验内容

1、标准异常:设计一个程序,使得其运行时,可以接受用户输入若干个整数并依次存入数组中,不限定输入数的个数,使得在输入数的个数超过数组的实际大小时产生数组下标越界异常

(ArrayIndexOutOfBoundsException) 。程序代码中“不需要”对异常进行捕获处理,观察异常产生时程序运行是否被中断,编译器产生了怎样的提示。

2、自定义异常:设计一个新的程序或者完善题目1的程序,使得其运行时,可以接受用户输入若干个数并依次存入数组中。要求用户输入的整数必须大于 0 小于 100。如果不符合这个范围则抛出异常。请自定义一个异常类来表示这种情况,并在用户的输入不符合要求时抛出该异常。 三、实验分析与设计过程

1、声明一个数组,给出数组长度,使用for循环输入

2、自定义一个异常,用来显示输入错误时的提示。主类创建一个返回值为boolean的用来判断异常的方法。主类main()方法声明一个数组输入数据,try语句直接调用上面创建判断异常的方法。

四、测试数据和程序运行结果 1、源程序:

import java.util.Scanner;

public class NormException { public static void main(String[] args){ int A[]=new int[5]; for(int i=0;i

运行结果: 输入整数:2 输入整数:1 输入整数:4 输入整数:2 输入整数:5 输入整数:7

Exception in thread \ at sy.NormException.main(NormException.java:11) 2、源程序:

import java.util.Scanner; public class MyException { public static boolean even(int m) throws MyExcep { if (m<0||m>100) { throw new MyExcep(); } else { System.out.println(\正确,输入下一个数!\ return true; } } public static void main(String args[]) { int i=0; int A[] = new int[100];

for(i=0;i<100;i++){ Scanner input = new Scanner(System. in); System.out.print(\输入一个正整数:\ A[i] = input.nextInt(); try { even(A[i]); } catch (MyExcep e) { } } } }

class MyExcep extends Exception { // 自定义一种异常 public MyExcep() { System.out.println(\输入错误!您输入的值必须大于0且小于100\ } }

运行结果:

输入一个正整数:2 正确,输入下一个数! 输入一个正整数:-2

输入错误!您输入的值必须大于0且小于100 输入一个正整数:346

输入错误!您输入的值必须大于0且小于100 五、问题与总结

可以通过继承Exception类自定义异常类,抛出异常要使用throw关键字

实验六 多线程

? 实验目的

1、掌握线程和多线程的概念。

2、掌握创建线程的两种方法及其区别。

3、了解线程的启动、终止、同步、互斥和优先级等概念。 二、实验内容

1、编写一个程序,其功能是运行之后,其中有一个线程可以输出 20 次你的学号,另一个线程

会输出20次你的姓名。 2、编写一个图形界面程序,运行之后,让其中有一个线程能在界面上不断显示系统当前时间(获取时间可查询 java.util.Calendar 类,它包含了多个用于获得系统时间的函数) 。另让一个线程可以在界面上提示当前系统时间下用户该做什么工作(例如当程序判断出系统时间现在是 8:00到 9:00,则提示用户该上课;现在是23:00到8:00,则提示用户该休息) 。 三、实验分析与设计过程

1、自定义两个线程,用for循环输出

2、主类用来生成图形界面,自定义两个线程,一个线程实现获取并显示系统时间,一个线程通过当前系统时间指示做什么事情。两个线程创建带参数的构造方法,在主类main()方法创建线程对象实现显示时间和工作提示 四、测试数据和程序运行结果 1、源程序:

public class TwoThread { public static void main(String[] args){ Thread tr1=new MyThread1(); Thread tr2=new MyThread2(); tr1.start(); tr2.start(); } }

class MyThread1 extends Thread{ public void run(){ for(int i=0;i<20;i++){ System.out.println(\苏耀宗\ try{ sleep(100); } catch(InterruptedException e){ } } } }

class MyThread2 extends Thread{ public void run(){ for(int i=0;i<20;i++){ System.out.println(\ try{ sleep(100); } catch(InterruptedException e){ } } } }

运行结果: 苏耀宗 苏耀宗

0900380124 0900380124

... (姓名和学号各20次,不分先后) 2、源程序: import java.awt.*; import javax.swing.*;

import java.text.SimpleDateFormat; import java.util.Calendar; public class Time { JFrame clock=new JFrame(\日程表\ JLabel time=new JLabel(\ JTextArea what=new JTextArea(10,20); public Time(){ clock.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); clock.setLayout(new FlowLayout()); clock.add(time); clock.add(what); clock.setVisible(true); clock.pack(); Thread tr1=new Thread1(time); tr1.start(); Thread tr2=new Thread2(what); tr2.start(); } public static void main(String agrs[]){ new Time(); } }

class Thread1 extends Thread{ JLabel time=new JLabel(); Calendar now; SimpleDateFormat sdf=new SimpleDateFormat(\ public Thread1(JLabel label){ time = label; } public void run() { while(true){ now= Calendar.getInstance(); time.setText(\现在时间:\ try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } } }

class Thread2 extends Thread{ int h,m; JTextArea what=new JTextArea(); Calendar now;

public Thread2(JTextArea text){ what = text; } public void run(){ while (true) { now=Calendar.getInstance(); h=now.get(Calendar.HOUR_OF_DAY); m=now.get(Calendar.MINUTE); if(h==7&&m==15){ what.append(\起床了!\\n\ } else if(h==13){ what.append (\午休了!\\n\ } else if(h==21&&m==34){ what.append (\吃宵夜了!\\n\ } } } }

运行结果:

五、问题与总结

创建线程有两种方法,一是声明一个类的同时实现 Runnable 接口,这个类必须实现一个没有参数的run方法,run方法中的代码即线程所要做的事情,也可以通过继承Thread类自定义线程。各个线程执行没有先后之分。

实验七 流与文件

? 实验目的

1、掌握java 中流的概念和作用。

2、掌握文件读写所使用的相关流(类) 。 二、实验内容

假设已经有一个文本文件中存放着职工的工资记录。每个职工的记录包含姓名、工资、津贴三项。每条记录可以存放于一行(三项之间的间隔符可以自己决定) ,也可以将每条记录的三项

依次分别存放在

文本文件中的每一行。请设计一个程序,可以让用户选择打开这个文件查看其内容,并可让用户选择把每个职工的工资增加10%之后又存回原来的文件。 三、实验分析与设计过程 四、测试数据和程序运行结果 源程序:

import java.awt.FileDialog; import java.awt.event.*; import java.io.*;

import javax.swing.*; public class Sy {

public static void main(String[] args) { new face(); } }

class face extends JFrame implements ActionListener { JButton change, open, save; JTextArea text; JFrame jf;

FileDialog op, sa; face() {

change = new JButton(\调整\

op = new FileDialog(this, \打开\ sa = new FileDialog(this, \保存\ open = new JButton(\打开\ save = new JButton(\保存\ text = new JTextArea(); jf = new JFrame(); jf.setSize(520, 540); jf.setLayout(null); text.setSize(510, 500); text.setLocation(5, 5);

open.setLocation(170, 520); open.setSize(40, 25); change.setSize(40, 25); save.setSize(40, 25);

save.setLocation(340, 520);

op=new FileDialog(this,\打开\ sa=new FileDialog(this,\保存\ change.setLocation(500, 520); change.addActionListener(this); open.addActionListener(this); save.addActionListener(this); text.setWrapStyleWord(true); jf.add(open); jf.add(change); jf.add(save); jf.add(text);

jf.setResizable(true);

jf.setVisible(true); }

public void actionPerformed(ActionEvent e) { if (e.getSource() == change) {

pay p = new pay(text.getText()); text.setText(p.change()); } else if (e.getSource() == open) { op.setVisible(true); String tmp; try {

FileReader fl = new FileReader(new File(op.getDirectory(), op.getFile())); BufferedReader br = new BufferedReader(fl); while ((tmp = br.readLine()) != null) { text.append(tmp + \ }

fl.close();

} catch (Exception ee) { }

} else if (e.getSource() == save) { sa.setVisible(true); try {

FileWriter fw = new FileWriter(new File(op.getDirectory(), op.getFile())); BufferedWriter bw = new BufferedWriter(fw); bw.write(text.getText()); bw.flush(); fw.close();

} catch (Exception ee) { }

} } }

class pay {

Float[][] p; String[] s;

pay(String in) {

s = in.split(\ }

String change() {

String[] tt = new String[2]; double rt;

String part, tmp;

for (int i = 0; i < s.length; i++) { tmp = s[i];

tt = tmp.split(\

rt = Double.valueOf(tt[1])*1.1; part = tt[0] + \ s[i] = part; }

String yy=new String(); for(String ss:s){ yy+=ss; }

JOptionPane.showMessageDialog(null, yy, \标题\ return yy; } }

五、问题与总结

在初始化FileInputStream对象时,必须捕获异常或声明抛出异常,否则编译会出错。在构造 FileOutputStream 对象时,如果指定路径的文件不存在,会自动构建一个新的文件,如果原来的文件存在,则本次写入的内容会覆盖原来文件的内容。

实验八 网络

? 实验目的

1、掌握TCP和UDP网络程序设计的模型。

2、掌握TCP和UDP程序设计的基本方法和所使用的系统类。

3、了解基于应用层http协议的程序的设计以及使用系统类的组播、广播等网络程序设计。 二、实验内容

先熟悉所给的示例,了解网络编程的一般基本概念。然后两个同学为一组,分别设计一对控制台下的 TCP 通信程序的客户端和服务器端,然后双方要能够相互发送和反馈信息进行无限次连

续通信,直到

其中一方发送表示结束通信的“end”字符串,然后接收方也返回一个“end” ,双方结通信。 若可能的话,建议最好设计出图形界面下的程序(即设计成一个简单的网络聊天程序) 。可在本地机上做测试,或两个同学为一组在不同的机器上作测试都可以,要将服务器地址和端口号作为参数,在运行中可以进行修改。对于本机上测试,服务器地址使用 127.0.0.1 或者本机实际 IP地址。在网内不同机器上测试,要给出正确的服务器 IP地址或名称。 三、实验分析与设计过程 四、测试数据和程序运行结果 源程序:

import java.awt.event.*; import java.io.*; import java.net.*;

import java.util.logging.Level; import java.util.logging.Logger; import javax.swing.*; public class Sy {

public static void main(String[] args) {

String t=JOptionPane.showInputDialog(\输入IP地址:\ new face(t); } }

class face extends JFrame implements ActionListener { JFrame jf; JButton jb;

JTextArea text, input; String ip;

clientconn conn; face(String i) { ip=i;

jf = new JFrame(); jf.setLayout(null); jf.setSize(540, 600); text = new JTextArea(); input = new JTextArea(); jb = new JButton(\发送\ text.setSize(500, 400); text.setEditable(false); input.setSize(500, 150); jb.setSize(40, 30);

jb.addActionListener(this); text.setLocation(5, 5); input.setLocation(5, 410); jb.setLocation(500, 500); jf.add(jb); jf.add(text); jf.add(input);

jf.setResizable(true); jf.setVisible(true);

try { conn=new clientconn(text,i); }

catch (UnknownHostException ex) {

Logger.getLogger(face.class.getName()).log(Level.SEVERE, null, ex); } catch (IOException ex) {

Logger.getLogger(face.class.getName()).log(Level.SEVERE, null, ex); } }

public void actionPerformed(ActionEvent e) { if (e.getSource() == jb) {

conn.send(input.getText()); }

throw new UnsupportedOperationException(\ } }

class wr{

private PrintWriter out;

private BufferedReader in; JTextArea text; Socket s;

void wr(JTextArea t,Socket a){ try { s=a;

out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(s.getOutputStream())), true);

in = new BufferedReader(new InputStreamReader(s.getInputStream())); } catch (IOException ex) {

Logger.getLogger(wr.class.getName()).log(Level.SEVERE, null, ex); } }

void send(String s){out.println(s);} void print(){ String tmp; try {

while((tmp=in.readLine())!=null)text.append(tmp); } catch (IOException ex) {

Logger.getLogger(wr.class.getName()).log(Level.SEVERE, null, ex); }}}

class clientconn extends wr{ Socket s;

clientconn(JTextArea t,String ip) throws UnknownHostException, IOException { super();

s = new Socket(\ super.wr(t,s); }

public void sendMsg (String msg){ super.send(msg); };

public void get(){ super.print();}

void close() throws IOException{ text.append(\关闭链接\ s.close();

} }

class severconn extends wr{ ServerSocket ss; Socket s;

severconn(JTextArea t,int sck){ super(); try {

ss=new ServerSocket(sck); s=ss.accept(); super.wr(t, s);

} catch (IOException ex) {

Logger.getLogger(severconn.class.getName()).log(Level.SEVERE, null, ex); } }

public void sendMsg (String msg){ super.send(msg);};

public void get(){ super.print(); } }

五、问题与总结

java 对网络程序设计进行支持的类主要包含在 java.net 包中,它主要支持 TCP/UDP 及其上层的网络程序设计。TCP 是面向连接的可靠的字节流的传输。TCP 通信模型是典型的客户机-服务器模型。

本文来源:https://www.bwwdw.com/article/la78.html

Top