1、 本科实验报告 课程名称: java程序设计 实验地点: 实验室110 专业班级:物联网1401 学号: 2014002010 学生姓名: 李涛宇 指导教师: 李君蝉 实验成绩: 2016年 6 月 20 日 目 录 实验1 Java语言基础 3 实验2 数组和字符串编程 4 实验3 Java
2、面向对象程序设计 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) 实验过程中实验
3、步骤及其结果。 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+"是水仙花
4、数"); } } (2) 实验体会。 本实验虽然是java语言基础实验,但只运用到了java的输出,实际上仍然使用的是C语言基础中对于循环的控制。在多重循环控制中注意循环变量的控制。 实验2 数组和字符串编程 1.实验目的 (1) 通过实验,掌握Java语言中数组、字符串程序设计的基本方法。 (2) 较熟练地掌握Java程序数组的应用、字符串处理操作的方法应用。 2.实验内容 输入一段字符串,统计其中有多少个单词。(单词用空格隔开) 3.实验步骤及结果 (1) 实验过程中实验步骤及其结果。 package 实验测试; import java.util.Scan
5、ner; 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);
6、} } (2) 实验体会 这个实验主要运用了java语言中对于字符串进行处理的函数,由于丰富的库函数,java可以调用函数,便捷地实现其他语言需要很多代码才能实现的功能,应该熟悉java语言常用的库函数。 实验3 Java面向对象程序设计 1.实验目的 掌握Java面向对象程序设计中类、继承、包和接口的概念及应用,能熟练应用方法、类、成员变量等元素。 2.实验内容 (1) 创建一个复数类complex,以附属进行数学运算、复数具有如下格式:RealPart+ImaginaryRart*I ,其中,I为-1的平方根。 要求如下: ① 利用浮点变量表示此类的私有
7、数据。提供两个构造方法,一个用于此类声明的对象的初始化;一个为默认的无参构造方法。 ② 提供两复数加、减、乘的运算方法。 ③ 按格式(a,b)打印复数。其中a为实部,b为虚部。 (2) 编程实现以下简单超市管理,具体要求如下: ① 实现描述超市的类Suppermacket类,具有货架属性,记录系统中现有商品,定义盘点商品的函数check(盘点各类商品的数量,并输出盘点结果),查询商品的函数query,并显示查询结果; ② 定义商品类Goods,具有商品名称Name,商品价格Price,商品产地Producer等属性,操作Sale(销售商品,余额不足时给予提示)、Add(商品上
8、架操作)和ShowMe(显示商品信息)。 ③ main函数,测试以上所要求的各种功能,即可以根据菜单命令增加、删除、查询商品、盘点商品,以及商品销售和商品上架的操作 提示:① 超市货架可以使用商品数组,数组大小100表明存放100个商品。 ② 注意实现商品查询的多态性,要求可以根据商品的名称或产地或价格查询商品的数量。 3.实验步骤及结果 (1) 实验过程中实验步骤及其结果。 package 实验测试; public class Comp { public static void main(String[] args) { // TODO Auto-gen
9、erated 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 imag
10、inaryRart) { super(); RealPart = realPart; ImaginaryRart = imaginaryRart; } void add(Complex a,Complex b) { RealPart = a.RealPart + b.RealPart; ImaginaryRart = a.ImaginaryRart + b.ImaginaryRart; System.out.println("两复数相加结果为(
11、"+ RealPart +","+ ImaginaryRart+")" ); } void sub(Complex a,Complex b) { RealPart = a.RealPart - b.RealPart; ImaginaryRart = a.ImaginaryRart - b.ImaginaryRart; System.out.println("两复数相减结果为("+ RealPart +","+ ImaginaryRart+")" ); } } (2) 实验体会 复数类的实验
12、通过自定义复数类,实现复数的加减,java通过类的调用可以实现新的数据类型及功能。复数类的实现也是基于对基本数据类型的定义操作。超市管理题目功能复杂,根据描述,没有正确理解题目所表达的意图,在看到网上相关参考后恍然大悟。代码非常复杂,但是注重每个细节功能的实现。 实验4 Java异常处理 1.实验目的 掌握异常的概念,以及如何定义、抛出和捕获处理异常。 2.实验内容 在实验三中的超市、商品类中创建一个自定义异常类。 要求:在定义商品类时,若销售商品数量大于余额则作为异常处理(InsufficientFundsException)。 提示: ① 产生异常条件是某类商品销售数量
13、大于库存额,因此是否抛出异常要先判断该条件。 ② 确定产生异常的方法,应该在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
14、 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;
15、 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=Getlin
16、e(); 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.pr
17、int("商品名称:"); 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("商
18、品价格:"); 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("存
19、在相同商品,增加失败!"); } } 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(S
20、tring 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
21、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
22、wMenu() { 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(St
23、ring name,float price, int num,String producer){
int count=listgoods.size();
for(int i=0;i 24、oolean Del(String name)
{
int count=listgoods.size();
for(int i=0;i 25、return false;
else{
for(int i=0;i 26、);
return true;
}
return false;
}
(2) 实验体会。
Java语言由于异常处理的存在,使得java可以对程序运行中出现的不合法数据或事件有处理能力,针对不同的情况,可以使用不同的try catch进行分别处理。Java程序更加具有强壮性。
实验5 多线程编程
1.实验目的
(1) 现成的概念、线程的生命周期。
(2) 多线程的编程:扩展Thread类及使用Runnable接口。
(3) 使用多线程机制实现动画
2.实验内容
(1) 创建简单的程序ThreeThread.java,该程序将创建三个线程,每个线程应当显 27、示它所运行的时间(可以考虑使用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 28、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);
29、 System.out.println(this.a.format(new Date()));
try{
sleep((int)(Math.random()*1000));
}
catch(InterruptedException e){}
}
}
}
运行结果
(2) 实验体会
本实验通过sleep及start控制线程在三个线程之间灵活切换,使得java程序利用率更加提高。在就绪,执行,挂起之间切换。
实验6 图形用户界面编程
1.实验目的
掌握文本组件、按钮和单、复选按钮组件的使用;掌握列表的使用,鼠标、键盘事件的处 30、理;掌握布局控制的方法。
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.JFr 31、ame;
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 32、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;
33、
}
@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-generate 34、d 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
35、
}
}
(2) 实验体会
图形用户界面使得java程序更具有交互性。在本实验中,通过事件监听器的注册,可以对不同的鼠标指令多态地进行不同反应。编程中由于对button组建的函数不太熟悉,导致实现接口时出现问题。
实验7 输入及输出
1.实验目的
(1) 掌握Java两种基本输入/输出流类的使用。
(2) 掌握Java文件类型的使用。
(3) 掌握文件的输入、输出方法。
2.实验内容。
(1) 编写程序,利用Java字符流文件输入/输出类,实现将源程序复制到另一个文件中。
(2)编写一个程序,比较两个文件的内容是否相同。
3.实验步骤及结果
(1) 实验过 36、程中实验步骤及其结果
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 37、
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 BufferedInputSt 38、ream(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();
}
} 39、
(二)文本内容比较
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 40、"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






