资源描述
本科实验报告
课程名称: java程序设计
实验地点: 实验室110
专业班级:物联网1401 学号: 2014002010
学生姓名: 李涛宇
指导教师: 李君蝉
实验成绩:
2016年 6 月 20 日
目 录
实验1 Java语言基础 3
实验2 数组和字符串编程 4
实验3 Java面向对象程序设计 5
实验4 Java异常处理 7
实验5 多线程编程 12
实验6 图形用户界面编程 13
实验7 输入及输出 15
实验1 Java语言基础
1.实验目的
(1) 通过实验,掌握Java语言程序设计的基本方法。
(2) 学会Java语言中标示符的命名、运算符和表达式的应用。
(3) 熟练地掌握Java程序流程控制语句的应用。
2.实验内容
“水仙花数”是指一个3位数,其个位、十位、百位上的数字的立方和等于该数本身,例如371=33+73+13,因此371是一个水仙花数。编写程序,求所有的水仙花数。
3.实验步骤及结果
(1) 实验过程中实验步骤及其结果。
package 实验测试;
public class Flower {
public static void main(String[] args) {
// TODO Auto-generated method stub
int a,b,c;
for(a=1;a<10;a++)
for(b=0;b<10;b++)
for(c=0;c<10;c++)
if(a*a*a+b*b*b+c*c*c==100*a+10*b+c)
System.out.println(100*a+10*b+c+"是水仙花数");
}
}
(2) 实验体会。
本实验虽然是java语言基础实验,但只运用到了java的输出,实际上仍然使用的是C语言基础中对于循环的控制。在多重循环控制中注意循环变量的控制。
实验2 数组和字符串编程
1.实验目的
(1) 通过实验,掌握Java语言中数组、字符串程序设计的基本方法。
(2) 较熟练地掌握Java程序数组的应用、字符串处理操作的方法应用。
2.实验内容
输入一段字符串,统计其中有多少个单词。(单词用空格隔开)
3.实验步骤及结果
(1) 实验过程中实验步骤及其结果。
package 实验测试;
import java.util.Scanner;
public class Letter {
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("请输入一串字符");
Scanner sc=new Scanner(System.in);
String message=sc.nextLine();
String[] sp=message.split(" ");
System.out.println("字符串单词数位:"+sp.length);
}
}
(2) 实验体会
这个实验主要运用了java语言中对于字符串进行处理的函数,由于丰富的库函数,java可以调用函数,便捷地实现其他语言需要很多代码才能实现的功能,应该熟悉java语言常用的库函数。
实验3 Java面向对象程序设计
1.实验目的
掌握Java面向对象程序设计中类、继承、包和接口的概念及应用,能熟练应用方法、类、成员变量等元素。
2.实验内容
(1) 创建一个复数类complex,以附属进行数学运算、复数具有如下格式:RealPart+ImaginaryRart*I ,其中,I为-1的平方根。
要求如下:
① 利用浮点变量表示此类的私有数据。提供两个构造方法,一个用于此类声明的对象的初始化;一个为默认的无参构造方法。
② 提供两复数加、减、乘的运算方法。
③ 按格式(a,b)打印复数。其中a为实部,b为虚部。
(2) 编程实现以下简单超市管理,具体要求如下:
① 实现描述超市的类Suppermacket类,具有货架属性,记录系统中现有商品,定义盘点商品的函数check(盘点各类商品的数量,并输出盘点结果),查询商品的函数query,并显示查询结果;
② 定义商品类Goods,具有商品名称Name,商品价格Price,商品产地Producer等属性,操作Sale(销售商品,余额不足时给予提示)、Add(商品上架操作)和ShowMe(显示商品信息)。
③ main函数,测试以上所要求的各种功能,即可以根据菜单命令增加、删除、查询商品、盘点商品,以及商品销售和商品上架的操作
提示:① 超市货架可以使用商品数组,数组大小100表明存放100个商品。
② 注意实现商品查询的多态性,要求可以根据商品的名称或产地或价格查询商品的数量。
3.实验步骤及结果
(1) 实验过程中实验步骤及其结果。
package 实验测试;
public class Comp {
public static void main(String[] args) {
// TODO Auto-generated method stub
Complex a = new Complex(3, 1);
Complex b = new Complex(2, 5);
a.sub(a,b);
a.add(a,b);
}
}
class Complex
{
private double RealPart;
private double ImaginaryRart;
public Complex(double realPart, double imaginaryRart) {
super();
RealPart = realPart;
ImaginaryRart = imaginaryRart;
}
void add(Complex a,Complex b) {
RealPart = a.RealPart + b.RealPart;
ImaginaryRart = a.ImaginaryRart + b.ImaginaryRart;
System.out.println("两复数相加结果为("+ RealPart +","+ ImaginaryRart+")" );
}
void sub(Complex a,Complex b) {
RealPart = a.RealPart - b.RealPart;
ImaginaryRart = a.ImaginaryRart - b.ImaginaryRart;
System.out.println("两复数相减结果为("+ RealPart +","+ ImaginaryRart+")" );
}
}
(2) 实验体会
复数类的实验通过自定义复数类,实现复数的加减,java通过类的调用可以实现新的数据类型及功能。复数类的实现也是基于对基本数据类型的定义操作。超市管理题目功能复杂,根据描述,没有正确理解题目所表达的意图,在看到网上相关参考后恍然大悟。代码非常复杂,但是注重每个细节功能的实现。
实验4 Java异常处理
1.实验目的
掌握异常的概念,以及如何定义、抛出和捕获处理异常。
2.实验内容
在实验三中的超市、商品类中创建一个自定义异常类。
要求:在定义商品类时,若销售商品数量大于余额则作为异常处理(InsufficientFundsException)。
提示:
① 产生异常条件是某类商品销售数量大于库存额,因此是否抛出异常要先判断该条件。
② 确定产生异常的方法,应该在sale方法中产生异常Insufficient Funds Exception。
③ 处理异常安排在调用sale的时候,因此sale方法要声明异常,由上级方法捕获并处理。
④ 要定义好自己的异常。
3.实验步骤及结果
(1) 实验过程中实验步骤及其结果。
import java.io.*;
import java.util.Scanner;
public class Main {
static String name;
static float price;
static int num;
static String producer;
static Supermarkt market=new Supermarkt();
public static void main(String[] args)throws IOException{
int i=0;
while(true){
market.ShowMenu();
i=Integer.parseInt(Getline());
switch(i){
case 1: Add();
break;
case 2: Del();
break;
case 3: Showgoods();
break;
case 4: Query();
break;
case 5: System.out.print("成功退出系统");
return;
default:System.out.println("输入错误,请重新输入!");
break;
}
}
}
public static void Query() {
System.out.println("**查询商品**");
System.out.print("商品名:");
name=Getline();
if(!market.Query(name)){
System.out.print("没有该商品");
}
}
public static void Showgoods() {
System.out.println("**显示所有商品**");
if(!market.Showgoods()){
System.out.println("没有任何商品");
}
}
public static void Del() {
System.out.println("**删除商品**");
System.out.print("商品名称:");
name=Getline();
if(market.Del(name)){
System.out.println("删除商品->" + name + " 成功!");
}
else{
System.out.println("该商品不存在");
}
}
public static void Add() {
System.out.println("**增加商品**");
System.out.print("商品名称:");
name=Getline();
System.out.print("商品价格:");
price=Float.parseFloat(Getline());
System.out.print("商品数量:");
num=Integer.parseInt(Getline());
System.out.print("商品产地:");
producer=Getline();
if (market.Add(name, price, num,producer)) {
System.out.println("增加商品->" + name + " 成功!");
} else {
System.out.println("存在相同商品,增加失败!");
}
}
public static String Getline() {
Scanner scan = new Scanner(System.in);
String str = scan.nextLine();
return str.trim();
}
}
2)
public class Goods {
private String name;
private float price;
private int num;
private String producer;
public Goods(String name,float price,int num,String producer){
this.name=name;
this.price=price;
this.num=num;
this.producer=producer;
}
public String GetName(){
return this.name;
}
public float GetPrice(){
return this.price;
}
public int GetNum(){
return num;
}
public String GetProducer(){
return this.producer;
}
public void Showgoods(){
System.out.print("商品名称: "+name+" 商品价格:"+price+" 商品数量:"+num+" 商品产地:"+producer+"\n");
}
}
3)
import java.util.Vector;
public class Supermarkt {
static Vector<Goods> listgoods=new Vector<Goods>();
public void ShowMenu() {
System.out.println("---------");
System.out.println("1.增加商品 ");
System.out.println("2.删除商品");
System.out.println("3.显示商品 ");
System.out.println("4.查询商品 ");
System.out.println("5.退出系统 ");
System.out.println("--------");
return;
}
//增加商品
public boolean Add(String name,float price, int num,String producer){
int count=listgoods.size();
for(int i=0;i<count;i++)
if(listgoods.get(i).GetName().equals(name))
return false;
Goods newgoods =new Goods(name,price,num,producer);
listgoods.add(newgoods);
return true;
}
//删除商品
public boolean Del(String name)
{
int count=listgoods.size();
for(int i=0;i<count;i++)
if(listgoods.get(i).GetName().equals(name)){
listgoods.remove(i);
return true;
}
return false;
}
//显示商品
public boolean Showgoods(){
int count=listgoods.size();
if(count==0)
return false;
else{
for(int i=0;i<count;i++)
listgoods.get(i).Showgoods();
return true;
}
}
//查询商品
public boolean Query(String name){
int count=listgoods.size();
for(int i=0;i<count;i++)
if(listgoods.get(i).GetName().equals(name)){
listgoods.get(i).Showgoods();
return true;
}
return false;
}
(2) 实验体会。
Java语言由于异常处理的存在,使得java可以对程序运行中出现的不合法数据或事件有处理能力,针对不同的情况,可以使用不同的try catch进行分别处理。Java程序更加具有强壮性。
实验5 多线程编程
1.实验目的
(1) 现成的概念、线程的生命周期。
(2) 多线程的编程:扩展Thread类及使用Runnable接口。
(3) 使用多线程机制实现动画
2.实验内容
(1) 创建简单的程序ThreeThread.java,该程序将创建三个线程,每个线程应当显示它所运行的时间(可以考虑使用Date类或Calendar类)。
3.实验步骤及结果
(1) 实验过程中实验步骤及其结果
import java.text.SimpleDateFormat;
import java.util.*;
public class Hi {
public static void main(String args[]){
SimpleDateFormat s2 = new SimpleDateFormat("yyyy年MM月dd日EEEEE时mm分ss秒");
new HiH(s2,"jerry").start();
new HiH(s2,"liming").start();
new HiH(s2,"merry").start();
}
}
class HiH extends Thread{
private SimpleDateFormat a;
private String s1;
public HiH(SimpleDateFormat a,String str){
this.a = a;
s1 = str;
}
public void run(){
synchronized(this.a){
System.out.println(""+s1);
System.out.println(this.a.format(new Date()));
try{
sleep((int)(Math.random()*1000));
}
catch(InterruptedException e){}
}
}
}
运行结果
(2) 实验体会
本实验通过sleep及start控制线程在三个线程之间灵活切换,使得java程序利用率更加提高。在就绪,执行,挂起之间切换。
实验6 图形用户界面编程
1.实验目的
掌握文本组件、按钮和单、复选按钮组件的使用;掌握列表的使用,鼠标、键盘事件的处理;掌握布局控制的方法。
2.实验内容
(1) 试设计一窗口,内含一个按钮。开始运行时,按钮显示“Click Me”字样,当按钮按下时,按钮显示为“Click Me Again”字样,再按一次,则按钮显示“Click Me”字样,依次循环。
3.实验步骤及结果
(1) 实验过程中实验步骤及其结果
package 图形界面;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.JButton;
import javax.swing.JFrame;
public class GUI {
public static void main(String[] args) {
// TODO Auto-generated method stub
JFrame frm=new JFrame();
frm.setLayout(null);
frm.setVisible(true);
frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frm.setBounds(500,250,250,150);
JButton btn=new JButton("Click Me");
frm.add(btn);
btn.setBounds(120,60,120,30);
ButtonListener bln=new ButtonListener(btn);
btn.addMouseListener(bln);
}
}
class ButtonListener implements MouseListener{
boolean t=true;
JButton btn;
public ButtonListener(JButton btn){
this.btn=btn;
}
@Override
public void mouseClicked(MouseEvent arg0) {
// TODO Auto-generated method stub
t=!t;
}
@Override
public void mouseEntered(MouseEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void mouseExited(MouseEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void mousePressed(MouseEvent arg0) {
// TODO Auto-generated method stub
if(t) btn.setText("Click Me Again");
else btn.setText("Click Me");
}
@Override
public void mouseReleased(MouseEvent arg0) {
// TODO Auto-generated method stub
}
}
(2) 实验体会
图形用户界面使得java程序更具有交互性。在本实验中,通过事件监听器的注册,可以对不同的鼠标指令多态地进行不同反应。编程中由于对button组建的函数不太熟悉,导致实现接口时出现问题。
实验7 输入及输出
1.实验目的
(1) 掌握Java两种基本输入/输出流类的使用。
(2) 掌握Java文件类型的使用。
(3) 掌握文件的输入、输出方法。
2.实验内容。
(1) 编写程序,利用Java字符流文件输入/输出类,实现将源程序复制到另一个文件中。
(2)编写一个程序,比较两个文件的内容是否相同。
3.实验步骤及结果
(1) 实验过程中实验步骤及其结果
package 输入输出;
import java.awt.*;
import java.awt.event.*;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.;
import java.io.;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.;
import java.io.;
public class IOStream {
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
BufferedInputStream bis = null;
BufferedOutputStream bos = null;
bis = new BufferedInputStream(new (new File("C:\\Users\\Administrator\\Desktop\\输入输出\\src\\输入输出\\IOStream.java")));
bos = new BufferedOutputStream(new
(new File("C:\\Users\\Administrator\\Desktop.out")));
int i = 0;
while((i = bis.read()) != -1) {
bos.write(i);
}
bis.close();
bos.close();
}
}
(二)文本内容比较
package 比较;
import java.io.;
import java.io.IOException;
public class Compare {
public static void main(String[] args)throws IOException {
// TODO Auto-generated method stub
int str = 0;
int str1 = 0;
fr = null;
fw = null;
fr = new ("C:\\Users\\Administrator\\Desktop\\in");
fw = new ("C:\\Users\\Administrator\\Desktop\\out");
if((str=fr.read())!= (str1=fw.read()))
{
System.out.println("Different");
}
else
{
System.out.println("文件内容一样");
}
}
}
(2) 实验体会。
试验中进行三个流类的套结,从而实现对文件中字符的读写输入。让我在实验中困惑的是ecllips的相对路径好像无法识别,在文件路径打开时花了很大功夫。
27 / 27
展开阅读全文