java实验九选六已完成

更新时间:2024-06-21 20:17:01 阅读量: 综合文库 文档下载

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

实验一 Java面向对象

实验目的:深入理解、掌握面向对象的概念。 知识准备:

一.面向对象技术的基本概念:类、对象、方法、构造方法、属性、修饰符、方法重载和覆盖、继承、多态、抽象类和接口、内部类等。 二.Package和import语句 三.Jave API常用包

四.Java名字空间及访问规则 五.This和Super

实验内容:(选择其一)

一.写一个名为Stock的类模拟股票,类包含符号标志、名称、前期收盘价、当前价等属性,包含构造器方法和计算价格变化方法。类结构如下表: Stock private String symbol private String name private double previousClosingPrice private double currentPrice public Stock() public Stock(String symbol , String name) public String getSymbol() public String getName() public double getPreviousClosingPrice() public double getCurrentPrice() public void setSymbol(String symbol) public void setName(String name) public void setPreviousClosingPrice(double previousClosingPrice) public void setCurrentPrice(double currentPrice) public double changePercent() 请实现Stock类,并另写一个类来测试Stock类。在测试类中,创建一个Stock对象,其股票标志为SUN、名称为 Sun Mircosystem Inc、前期收盘价为100。随机设置一个新的当前价,显示价格变化比例。

二.设计一个汽车类Vehicle,包含的属性有车轮个数wheels和车重weight。小车类Car是Vehicle的子类,其中包含的属性有载人数loader。卡车类Truck是Car类的子类,其中包含的属性有载重量payload。每个类都有构造方法和输出相关数据的方法。 三.利用接口继承完成对生物biology、动物animal、人human三个接口的定义,其中生物接口定义呼吸breathe抽象方法,动物接口定义了吃饭eat和睡觉

sleep两个抽象方法,人接口定义了思维think和学习learn两个抽象方法;定一个普通人类person实现上述三个接口定义的抽象方法。

四.定义一个类Family,描述一个家庭,其中包括私有的钱数money(属性)、受保护的祖传秘方secret(方法,在其中写输出语句模拟即可)、只在家族中能够使用的运输工具vehicle(方法,在其中写输出语句进行模拟),公共的门牌号码

doorplate(属性)。将这个家庭放置在一个包中 (如china.hb.hd),编写一个该家庭的子类SubFamily,放置在另一个包(如china.beijing)中。测试其中几种被可见性修饰符修饰过的属性和方法。

第一个

//———————————————————— public class Stock{

private String symbol; private String name;

private double previousPrice; private double currentPrice;

public Stock(){ }

public Stock(String symbol,String name){ this.symbol=symbol; this.name=name; }

public String getSymbol(){ return symbol; }

public String getName(){ return name; }

public double getPreviousPrice(){ return previousPrice; }

public double getCurrentPrice(){ return currentPrice; }

public void setSymbol(String symbol){ this.symbol=symbol; }

public void setName(String name){ this.name=name; }

public void setPreviousPrice(double previousPrice){ this.previousPrice=previousPrice; }

public void setCurrentPrice(double currentPrice){ this.currentPrice=currentPrice; }

public double changePercent(){

return ((currentPrice-previousPrice)/previousPrice); } }

//—————————————————————————— import java.util.Scanner; public class TestStock{

public static void main(String[] args){

Stock sun=new Stock(\double x=100.0d;

sun.setPreviousPrice(x);

Scanner scan=new Scanner(System.in);

System.out.println(\请输入一个新的当前价:\ sun.setCurrentPrice(scan.nextDouble()); System.out.printf(\价格变化为:\

System.out.println(sun.changePercent()*100+\ } }

实验二 Java输入输出

实验目的:深入理解、掌握Java输入输出流,。 知识准备:

一.Java基本输入输出类:InputStream类、OutputStream类、Reader类、Writer类

二.File类

三.文件流和随机存取文件流 四.数据流

五.对象流-对象序列化和反序列化 六.字符流和字节流 实验内容:(选择其二)

一.File类的应用-文件、文件夹的建立、删除、重命名等

二.将一个文本文件用readLine()读出到屏幕,并将其写入到另外一个文件中。 三.将指定范围内的素数写入文件,并读出,求出其中最大值、最小值、平均值。 四.输入5名学生的姓名、年龄,并将学生信息(要求用对象表示)写入文件并读出。

一:—————————————————

// 一.File类的应用-文件、文件夹的建立、删除、重命名等 import java.io.File;

import java.io.IOException; public class Exam2_1 {

public static void main(String[] args) throws IOException { File file=new File(\

file.mkdir();

File file1=new File(\file1.createNewFile();

System.out.println(\文件夹建立\System.out.println(\文件建立:\

File fileNew=new File(file1.getParent(),\ System.out.println(\原始名字为:\

boolean a;

if( a=file1.renameTo(fileNew)){

System.out.println(\的重命名为:\ }

System.out.println(\下面建立并删除file2文件\ File file2=new File(\

file2.createNewFile();

System.out.println(\文件夹file2建立\ System.out.println(\删除file2:\ } }

二———————————————————

//二.将一个文本文件用readLine()读出到屏幕,并将其写入到另外一个文件中。 import java.io.*;

public class Exam2_2 {

public static void main(String[] args) throws IOException{

System.out.println(\下面从先前准备好的文件JAVA.txt中读取信息\ File file=new File(\VA.txt\

BufferedReader bufferedReader=new BufferedReader(new InputStreamReader(new FileInputStream(file),\

File fileNew=new File(\ fileNew.createNewFile();

FileWriter fileWriter=new FileWriter(fileNew);

BufferedWriter bufferedWriter=new BufferedWriter(fileWriter); String str=null;

str=bufferedReader.readLine(); while(str!=null){

System.out.println(str); fileWriter.write(str); fileWriter.flush();

str=bufferedReader.readLine(); }

fileWriter.close();

bufferedReader.close(); } }

实验三 异常处理机制

实验目的:深入理解、掌握面向对象的概念及其异常处理机制。 知识准备:

1.Exception的概念、子类及其继承关系 2.面向对象的异常处理机制

3.异常处理语句(try-catch-finally)

4.用throw语句抛出用户自定义Exception

5.用throws语句在方法声明抛出系统定义Exception 6.创建自己的异常 实验内容:

1.输入两个数据,显示两个数的商。

? 当除数或被除数不是数字时抛出NumberFormatExcetpion,并用

try?catch?finally语句进行处理。

? 当除数为0时,捕获ArithmeticException,并在控制台上打印异常信息。 ? 自定义异常LowerThanZeroException,当除数、被除数小于0时抛出,

import java.util.Scanner; public class Exam3{

static int dividend; static int divisor; static double result;

public static void main(String[] args){ Scanner scan=new Scanner(System.in); boolean judge=false;

while(!judge){ judge=true;

try {

System.out.println(\请输入被除数:\ dividend=scan.nextInt();

System.out.println(\请输入除数:\ divisor=scan.nextInt(); if(divisor==0)

throw new ArithmeticException(); if(dividend<0||divisor<0)

throw new LowerThanZeroException(); result=(double)dividend/divisor; }

catch(LowerThanZeroException e1){ judge=false;

System.out.println(e1.toString()); }

catch(ArithmeticException e2){ judge=false;

System.out.println(e2.toString()); }

catch (java.util.InputMismatchException e3) { judge=false;

throw new NumberFormatException(); }

finally{

if(judge)

System.out.println(\结果为:\ else

System.out.println(\请重新输入:\ } } } }

class LowerThanZeroException extends Exception{

LowerThanZeroException(){

super(\除数或被除数小于0\ }

@Override

public String toString(){

String str=\除数或被除数小于0\ return str; } }

实验四 Java常见类的使用和泛型

实验目的:深入理解、掌握Arrays类,Java字符串String和StringBuffer类,正则表达式和模式匹配。 知识准备:

一.String和StringBuffer类的使用

二.日期类:Date、Calender、DateFromat类 三.数学类:Math类

四.Collection系列API简介 五.数据结构类:LinkedList、HashSet、HashMap、TreeSet、TreeMap等BigInteger类

六.StringTokenizer类 七.泛型

八.正则表达式

实验内容:(选择其二)

一.输入18位身份证号的前17位,输出1位校验位。

18位公民身份号码是特征组合码,由十七位数字本体码和一位数字校验码组成。 六位数字地址码:常住户口所在县(市、旗、区)的行政区划代码,按 GB/T 2260执行。

八位数字出生日期码:按 GB/T 7408 的规定执行。

三位数字顺序码:表示在同一地址码所标识的区域范围内,对同年、同月、同日出生的人编定的顺序号,顺序码的奇数分配给男性,偶数千分配给女性。 一位数字校验码:采用ISO 7064:1983,MOD 11-2 校验码系统。 计算方法:

(1)十七位数字id[17]本体码加权求和公式

S = Sum(Ai * Wi), i = 0, ... , 16 ,先对前17位数字的权求和 Ai:表示第i位置上的身份证号码数字值

Wi:表示第i位置上的加权因子,分别为w[17] 7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2

(2)计算模: Y = mod(S, 11)

(3)通过模得到对应的校验码 v[11]

Y 0 1 2 3 4 5 6 7 8 9 10 校验码 1 0 x 9 8 7 6 5 4 3 2 二.用HashSet实现集合的并、交、差集运算。

三.给定一个英文文本文件(>100MB),统计其中的各种不同的英文单词的个数,并将统计结果存入一个文件中。

四.给定一个HTML文件,将其中的IP地址、Email地址、超级链接输出。 五.利用Collection类实现扑克牌的洗牌。

二--------------------------------- ///二.用HashSet实现集合的并、交、差集运算 import java.util.HashSet; import java.util.Random; class MyHashSet {

public static void main(String[] args) {

HashSet hashSetA=new HashSet();//集合1 HashSet hashSetB=new HashSet();//集合2

hashSetA.add(\为集合加入元素 hashSetA.add(\ hashSetA.add(\ hashSetB.add(\ hashSetB.add(\ hashSetB.add(\

for(int i=0;i<10;i++){ //为集合加入元素 int anyNumber;

Random random=new Random();

anyNumber=random.nextInt(10)+1; hashSetA.add(anyNumber);

anyNumber=random.nextInt(10)+1; hashSetB.add(anyNumber); }

Set mySet=new Set(hashSetA,hashSetB);

System.out.printf(\集合A为:\ mySet.print( hashSetA);

System.out.printf(\集合B为:\ mySet.print( hashSetB);

System.out.printf(\和B的并集为:\ mySet.print(mySet.getSum());

System.out.printf(\和B的交集为:\ mySet.print(mySet.getMixed());

System.out.printf(\集合A对B的差集为:\

mySet.print(mySet.getDifference(hashSetA, hashSetB));

System.out.printf(\集合B对A的差集为:\

mySet.print(mySet.getDifference(hashSetB, hashSetA)); } }

//可进行并、交、差集运算--------------- class Set{

private HashSet h1=new HashSet(); private HashSet h2=new HashSet();

private HashSet hSum=new HashSet(); //并集 private HashSet hMixed=new HashSet(); //交集

private HashSet hDifference=new HashSet(); //h差集 public Set(HashSet h1,HashSet h2){ this.h1=h1; this.h2=h2;

for (Object k:h1) { hSum.add(k);

}

for(Object k:h2){ boolean b;

b=hSum.add(k); if(!b){

hMixed.add(k); } } }

public HashSet getSum(){ return hSum; }

public HashSet getMixed(){ return hMixed; }

public HashSet getDifference (HashSet h1,HashSet h2){ this.h1=h1; this.h2=h2;

for(Object k:h1){ boolean b;

b=hMixed.add(k); if(b){

hDifference.add(k); } }

return hDifference; }

public void print(HashSet h){ int i=1;

for(Object it: h){

System.out.print(it+\

if(i==0)

System.out.println(\ i++; }

System.out.println(\ }

}

三————————————————————————————————— ////三.给定一个英文文本文件(>100MB),统计其中的各种不同的英文单词的个数,并将统计结果存入一个文件中。 import java.io.BufferedWriter; import java.io.File;

import java.io.FileWriter;

import java.io.RandomAccessFile; import java.util.HashMap; import java.util.Map;

import java.util.Scanner;

import java.util.StringTokenizer; public class Exam4_3 {

static String fileName; static String filePath;

public static void main(String[] args) throws Exception{ Scanner scan=new Scanner(System.in);

System.out.println(\输入读取文件的路径:\ filePath=scan.nextLine();

System.out.println(\输入要读取的文件名:\ fileName=scan.nextLine();

Map map=new HashMap(); ReadText readText=new ReadText(fileName,filePath,map); map=readText.getWords();

System.out.println(\输入要生成文件的路径:\ filePath=scan.nextLine();

System.out.println(\输入要生成文件的文件名:\

fileName=scan.nextLine();

System.out.println(fileName+\文件生成\

File text=new File(filePath+fileName); text.createNewFile();

FileWriter fileWriter=new FileWriter(text);

BufferedWriter bufferedWriter=new BufferedWriter(fileWriter); for(String k:map.keySet()){

bufferedWriter.write(k+\个\ bufferedWriter.newLine();

System.out.println(k+\个\ }

bufferedWriter.flush(); fileWriter.close();

bufferedWriter.close(); } }

class ReadText{

String fileName; String filePath;

Map map;

public ReadText(String fileName,String filePath,Map map){ this.fileName=fileName; this.filePath=filePath; this.map=map; }

public Map getWords()throws Exception{ String str;

File text=new File(filePath,fileName);

System.out.println(\文件是否存在:\ RandomAccessFile randomAccessFile=new RandomAccessFile(text,\

while((str=randomAccessFile.readLine())!=null){

StringTokenizer analyse=new StringTokenizer(str,\\\n \\t ; : ? \\\

while(analyse.hasMoreTokens()){

String string=analyse.nextToken();

if(!map.containsKey(string)) map.put(string,\ else

map.put(string,String.valueOf((Integer.valueOf(map.get(string))+1))); }

analyse=null; }

randomAccessFile.close();

return map; } }

——————————————————————————————————

实验五 GUI界面制作-AWT、Swing与NetBeans

实验目的:

1.深入理解、掌握Java图形界面编程、事件模型 2.掌握NetBeans的基本使用方法和常用属性的配置 3.利用NetBeans的Mattise组件进行GUI编程。 知识准备:

一.AWT、布局管理器、常用组件、容器、事件处理模型。 二.Swing组件

三.Java事件处理机制 四.NetBeans

实验内容:(选择其一)

一.利用Canvas实现画图软件的功能。

二.利用Graphics类在Frame上画出各种图形并填充。

List应用:点击“>>”按钮时,把左边文本区域的内容添加到右边文本区域。“<<”功能相反。 三.图形日历的实现 四.记事本的实现

五.华容道游戏的实现

六.使用Matisse创建GUI应用程序:名片管理程序,完成名片的增加、删除、修改等集成界面并完成事件处理代码的编写。 import java.awt.Color;

import java.awt.Container;

import java.awt.Rectangle;

import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.Calendar; import javax.swing.*; /**

三.图形日历的实现 */

public class Exam5 {

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

class Mycalendar{

Calendar myDate = Calendar.getInstance(); JLabel lyear = new JLabel(\年:\ JLabel lmonth = new JLabel(\月:\ JButton button = new JButton(\确定\

JTextField textyear = new

JTextField(String.valueOf(myDate.get(Calendar.YEAR)),5); JTextField textmonth = new

JTextField(String.valueOf(myDate.get(Calendar.MONTH)+1),5);

String[] str = new String[]{\星期日\星期一\星期二\星期三\星期四\星期五\星期六\

JLabel[] label = new JLabel[7]; public Mycalendar(){

JFrame frame = new JFrame();

frame.setBounds(400,150,490,300); frame.setLayout(null); frame.setVisible(true);

Container content=frame.getContentPane(); content.setBackground(Color.green);

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

lyear.setBounds(140,10,50,20); textyear.setBounds(155,10,50,20);

lmonth.setBounds(250,10,50,20); textmonth.setBounds(275,10,50,20);

button.setBounds(355,10,60,25);

frame.add(lyear); frame.add(textyear); frame.add(lmonth); frame.add(textmonth); frame.add(button);

for(int i=0;i<7;i++){

label[i]=new JLabel(str[i]);

label[i].setBounds(new Rectangle(30+i*60,40,67,34)); frame.add(label[i]); }

final JLabel[] numberLabel= new JLabel[37]; for(int i=0,l=0,h=0;i<37&&l<7&&h<7;i++){ if(i%7==0){ l=0; h++; } else

l++;

numberLabel[i] = new JLabel(\ numberLabel[i].setBounds(new Rectangle(30+l*60,h*30-30+75,60,26)); frame.add(numberLabel[i]); }

MyDateCompute myDateCompute = new

MyDateCompute(Integer.parseInt(textyear.getText()),Integer.parseInt(textmonth.getText()));

int dateNumber=myDateCompute.getDateNumber();

myDate.set(Integer.parseInt(textyear.getText()),Integer.parseInt(textmonth.getText())-1,1);

int skip = myDate.get(Calendar.DAY_OF_WEEK);

for(int i=1,j=skip-1;i<=dateNumber;i++){

numberLabel[j].setText(String.valueOf(i)); j++; }

class MyEventExam5 implements ActionListener{ public void actionPerformed(ActionEvent e){

int year = Integer.parseInt(textyear.getText());

int month = Integer.parseInt(textmonth.getText());

if(month<1||month>12){

JDialog dialog = new JDialog(); dialog.setVisible(true);

dialog.setBounds(400,200,400,400); JLabel dialogLabel = new JLabel(\日期输入错误!\

dialog.add(dialogLabel); }

else{

MyDateCompute myDateCompute = new MyDateCompute(year,month);

myDate.set(year,month-1,1);

int dateNumber=myDateCompute.getDateNumber(); int skip = myDate.get(Calendar.DAY_OF_WEEK);

for(int i=0;i<37;i++)

numberLabel[i].setText(\

for(int i=1,j=skip-1;i<=dateNumber;i++){

numberLabel[j].setText(String.valueOf(i)); j++; } } } }

textyear.addActionListener(new MyEventExam5()); textmonth.addActionListener(new MyEventExam5()); button.addActionListener(new MyEventExam5()); } }

class MyDateCompute{

private boolean leap_year=false; private int dateNumber;

public MyDateCompute(int year,int month){

if(year@0==0||(year%4==0&&year0!=0)) leap_year=true; int february=28; if(leap_year) february=29; switch(month){

case 1:case 3:case 5: case 7:case 8:case 10:case 12:

dateNumber=31;break;

case 4:case 6:case 9: case 11: dateNumber=30;break;

case 2:dateNumber=february; } }

public boolean getLeap_year(){ return leap_year; }

public int getDateNumber(){ return dateNumber; } }

实验六 Java多线程技术

实验目的:深入理解、掌握Java多线程技术 知识准备:

一.创建线程的方式

二.Thread类的常用方法

三.线程状态控制

四.线程的同步与互斥 五.线程通讯

实验内容:(选择其一)

一.线程Number负责从0开始输出数字,线程Letter负责循环输出26个字母,线程Hello负责每10秒输出“你好!”。并尝试线程的互相配合的方法(要求自定)。

二.编写一个Thread类,在该类内部保存若干条格言,每隔固定时间随机选择一条格言显示。

三.使用AWT或Swing实现图形用户界面的计数器或计时器,要求:有计时、暂停/继续、清零按钮。 实验总结:

知识拓展:Timer与TimerTask类 /**

*二.编写一个Thread类,在该类内部保存若干条格言,每隔固定时间随机选择一条格言显示。 */

class Exam6 {

public static void main(String[] args) { MyThread myThread=new MyThread(); myThread.start(); } }

class MyThread extends Thread{ @Override

public void run(){

char[][] motto=new char[15][50];

StringBuffer mottoChar=new StringBuffer(\书是人类进步的阶梯--高尔基*\

mottoChar.append(\路灯经过一夜的努力,才无愧地领受第一缕晨光的抚慰*\

mottoChar.append(\只有一条路不能选择——那就是放弃的路*\ mottoChar.append(\只有一条路不能拒绝——那就是成长的路。*\ mottoChar.append(\任何业绩的质变都来自于量变的积累。*\ mottoChar.append(\没有天生的信心,只有不断培养的信心。*\ mottoChar.append(\即使爬到最高的山上,一次也只能脚踏实地地迈一步。*\

mottoChar.append(\别想一下造出大海,必须先由小河川开始。*\ mottoChar.append(\眼泪的存在,是为了证明悲伤不是一场幻觉*\ mottoChar.append(\再长的路,一步步也能走完,再短的路,不迈开双脚也无法到达。*\

mottoChar.append(\假如樵夫害怕荆棘,船只避忌风浪,铁匠畏惧火星,那么,世界就会变成另一副模样。*\

mottoChar.append(\

mottoChar.append(\ int first=mottoChar.indexOf(\

int second=mottoChar.indexOf(\ int i;

for(i=0;i<15;i++){

motto[i]=mottoChar.substring(first,second+1).toCharArray(); first=mottoChar.indexOf(\ second=mottoChar.indexOf(\ if (first==-1) break; }

Random random=new Random(); for(int j=0;j<20;j++){ try{

Thread.currentThread().sleep(2500);

System.out.println(motto[random.nextInt(i)]); }

catch(InterruptedException e){ e.printStackTrace(); } } } }

实验七 Java网络编程

实验目的:深入理解、掌握Java网络编程。 知识准备: 一.TCP与UDP 二.IP与端口

三.Java Socket编程

实验内容:(选择其一)

一.网络爬行机器人程序的设计。 二.聊天程序设计与实现。

实验八 JDBC数据库编程

实验目的:

1.深入理解、掌握JDBC数据库编程。

2.学会使用JDBC连接MySql、Access、Oracle等常用数据库,并实现常用操作。 3.掌握java.sql 知识准备:

一.关系数据库的安装和使用 二.SQL语言

三.Java和各种数据库连接的方法 四. 相关JDBC驱动程序的下载 实验内容:

一.利用JDBC连接一个数据库(可以是MySql、Access、Oracle等数据库),并

实现常用的增、删、改、查等数据操作与数据字典的定义与修改等元数据操作。

实验九 JSP动态网站编程

实验目的:

1.深入理解、掌握JSP编程技术 2.学会构造一个动态网站。

知识准备:

一.HTML静态网页制作方法 二.JSP动态网页技术

三.网站搭建:web服务器Apachw+tomcat的安装

实验内容:

一.建立一个基于数据库的高考网站,功能包括:学生报名、准考证生成、成绩管理、招生录取等。

一.利用JDBC连接一个数据库(可以是MySql、Access、Oracle等数据库),并

实现常用的增、删、改、查等数据操作与数据字典的定义与修改等元数据操作。

实验九 JSP动态网站编程

实验目的:

1.深入理解、掌握JSP编程技术 2.学会构造一个动态网站。

知识准备:

一.HTML静态网页制作方法 二.JSP动态网页技术

三.网站搭建:web服务器Apachw+tomcat的安装

实验内容:

一.建立一个基于数据库的高考网站,功能包括:学生报名、准考证生成、成绩管理、招生录取等。

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

Top