admin 管理员组

文章数量: 887053


2024年1月11日发(作者:html上传文件代码)

实验报告□ 实践报告□

课程名称: Java语言程序设计

实验、实践名称:Java语言基础、数组和字符串编程、Java面向对象程序设计、Java异常处理 多线程编程、图形用户界面编程

实验、实践地点: 致向楼301

专业班级: 软件1531 学号: 2015006446

学生姓名: 关玉芬

指导教师: 相洁

2017 年 1月8日

实验一 Java语言基础

一、实验目的和要求

(1) 通过实验,掌握Java语言程序设计的基本方法。

(2) 学会Java语言中标示符的命名、运算符和表达式的应用。

(3) 熟练地掌握Java程序流程控制语句的应用。

二、实验内容

1.编写应用程序,计算100(含100)以内所有偶数的和。

2.“水仙花数”是指一个3位数,其个位、十位、百位上的数字的立方和等于该数本身,例如371=33+73+13,因此371是一个水仙花数。编写程序,求所有的水仙花数。

3.编写一个程序,求1-100间的素数。

4. 有一函数:

x (x<1)

Y= 3x-2 (1≤x<10)

4x (x≥10)

写一程序,给定x值,输出y值。

5. 使用for循环语句,编写程序输出以下图案。

☆☆☆

☆☆☆☆☆

☆☆☆☆☆☆☆

☆☆☆☆☆

☆☆☆

6.编写程序,输出从公元1900年到2100年所有闰年的年号,每输出5个年号换一行。判断年是否为闰年的条件是:① 若年号可以被4整除,而不能被100整除,则是闰年;②

若年号可以被400整除,也是闰年。

三、主要仪器设备

使用的计算机惠普:硬件配置Win7、软件环境eclipse

四、实验代码

1. public class a1 {

public static void main(String[] args) {

int i,sum=0;

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

if(i%2==0)

sum+=i;}

n(sum);

}}

2. public class a2 {

public static void main(String[] args) {

int i,a,b,c;

for(i=100;i<=999;i++){

a=i%10;

b=(i-a)%100/10;

c=(i-b*10-a)/100;

if(i==a*a*a+b*b*b+c*c*c){

n(i);

}}}}

3. public class a3 {public static void main(String[] args) {

// TODO Auto-generated method stub

for(int i=2;i<=100;i++) {

boolean t = false;

for(int j=2;j

if(i%j==0){t=false;break;}

else {t=true;}}

if(t) (i+" ");}}}

4. public class a4 {public static void main(String[] args) {

int i,j;

for(i=1;i<=4;i++){

for(j=1;j<=((-1)*i+4);j++)

(" ");

for(j=1;j<=(2*i-1);j++)

("☆");

n();}

for(i=3;i>=1;i--){

for(j=1;j<=((-1)*i+4);j++)

(" ");

for(j=1;j<=(2*i-1);j++)

("☆");

n();}}}

5. import .*;

public class a5 {

public static void main(String[] args) {

Scanner x=new Scanner();

n("请输入一个大于1的整数");

int i=t();

n("你刚才输入的数为"+i);

if(i<1) ("输出结果为"+i);

else if (i>=1&&i<10) ("输出结果为"+(i*3-2));

else ("输出结果为"+i*4);

();}}

6. package shiyan;

public class a6 {

public static void main(String[] args) {

int i,j=0;

for(i=1900;i<=2100;i++){

if((i%4==0)&&(i%100!=0)||(i%400==0)){

j++;

if(j%5==0)

n(i);

else{

(i);

(" ");}}}}}

五、实验结果

1.

2.

3.

4.

5.

6.

六、讨论、心得

初步掌握了Eclipse集成开发环境。

掌握Java 基本数据类型、运算符与表达式、数组的使用方法,语法结构,掌握顺序结构、选择结构和循环结构语法的程序设计方法。、对JAVA程序设计有初步的了解

实验二 数组和字符串编程

一、实验目的和要求

(1) 通过实验,掌握Java语言中数组、字符串程序设计的基本方法。

(2) 较熟练地掌握Java程序数组的应用、字符串处理操作的方法应用。

二、实验内容

(1) 编写一个程序,在控制台输入10个数,按大小顺序输出。

(2) 求一个3*3矩阵对角元素之和。

(3) 输入一段字符串,统计其中有多少个单词。(单词用空格隔开)

三、主要仪器设备

使用的计算机惠普:硬件配置Win7、软件环境eclipse

四、实验代码

1、package a1;

import .*;

import r;

public class a1 {

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

int count=10,k;

double data[]=new double[count];

Scanner sr = new Scanner();

("请输入十个数字:n");

for(k=0;k

data[k]=uble();

}

();

n("你输入的十个数字是:");

for(k=0;k

(" "+data[k]);

double[] dataCopy=new double[count+1];

double temp=0;

opy(data,0,dataCopy,1,);

for(k=1;k

for(int j=1;j<=count-k;j++){

if(dataCopy[j]>dataCopy[j+1]){

temp=dataCopy[j];

dataCopy[j]=dataCopy[j+1];

dataCopy[j+1]=temp;

}

}

n();

n("从小到大排序后的序列是:");

for(int j=1;j<;j++){

(" "+dataCopy[j]);}}}

2、

package a1;

import .*;

import r;

public class a2 {

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

double a[][]; int sum=0;

a=new double[3][3];

Scanner sr = new Scanner();

n("请按行优先输入一个3*3的矩阵:");

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

for(int j=0;j<3;j++){

a[i][j]=uble();

}

();

("你输入的3*3的矩阵是:");

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

n();

for(int j=0;j<3;j++){

(" "+a[i][j]+"t");

if(i==j)

sum+=a[i][j];}}

n();

n("对角线元素之和为"+sum);}}

3、

package a1;

import .*;

public class a3 {

public static void main(String[] args){

n("请输入英语单词并用空格隔开:");

Scanner sr=new Scanner();

String word=new String();

word=ne();

String[] words=(" ");

int num=;

n("字符串的单词数为"+num);

();}}

五、实验结果

1.

.

2.

3.

六、实验心得

通过本次实验掌握数组的声明、分配空间及初始化;理解多维数组(重点掌 握二维) ;掌握 String 类的特点及常用方法的使用;掌握 StringBuffer 类的特 点及常用方法的使用;掌握 String 类和 StringBuffer 类的区别;掌握 equal 方法与==的区别;但是本次练习中,我也出现了一些错误,是由于知识上的失误 和不小心犯下的低级错误,但是我努力改正。

实验三 Java面向对象程序设计

一、实验目的和要求

掌握Java面向对象程序设计中类、继承、包和接口的概念与应用,能熟练应用方法、类、成员变量等元素。

二、实验内容

1.创建一个复数类complex,以附属进行数学运算、复数具有如下格式:RealPart+ImaginaryRart*I ,其中,I为-1的平方根。

要求如下:

① 利用浮点变量表示此类的私有数据。提供两个构造方法,一个用于此类声明的对象的初始化;一个为默认的无参构造方法。

② 提供两复数加、减、乘的运算方法。

③ 按格式(a,b)打印复数。其中a为实部,b为虚部。

2. 创建银行账号Account类,实现存款(balance)的存(deposit)、取(withdraw)和查询(getbalance)等功能。

3.编程定义一个接口,实现三个数中求最小值和最大值的方法,并将程序存放在mymaths包中。

4. 编程实现以下简单超市管理,具体要求如下:

① 实现描述超市的类Suppermacket类,具有货架属性,记录系统中现有商品,定义盘点商品的函数check(盘点各类商品的数量,并输出盘点结果),查询商品的函数query,并显示查询结果;

② 定义商品类Goods,具有商品名称Name,商品价格Price,商品产地Producer等属性,操作Sale(销售商品,余额不足时给予提示)、Add(商品上架操作)和ShowMe(显示商品信息)。

③ main函数,测试以上所要求的各种功能,即可以根据菜单命令增加、删除、查询商品、盘点商品,以及商品销售和商品上架的操作

提示:① 超市货架可以使用商品数组,数组大小100表明存放100个商品。

② 注意实现商品查询的多态性,要求可以根据商品的名称或产地或价格查询商品的数量。

三、主要仪器设备

使用的计算机惠普:硬件配置Win7、软件环境eclipse

四、实验代码

1. package a1;

public class Complex {

float RealPart;

float ImaginaryRart;

public Complex(){}

public Complex(float R,float I){

RealPart=R;

ImaginaryRart=I;

}

public static Complex add(Complex a,Complex b){

Complex c=new Complex();

rt=rt+rt;

aryRart=aryRart+aryRart;

return c;

}

public Complex minus(Complex a,Complex b){

Complex c=new Complex();

rt=rt;

aryRart=aryRart;

return c;

}

public Complex multiply(Complex a,Complex b){

Complex c=new Complex();

rt=rt*aryRart*aryRart;

aryRart=rt*aryRart+aryRart*rt;;

return c;

}

public void print(){

n("("+rt+","+aryRart+")");

}

public static void main(String[] args){

Complex a = new Complex(1f,3f);

Complex b = new Complex(3f,4f);

Complex c = new Complex();

c = add(a,b);

();

}}

2. package shiyan;

import .*;

class Account{

private double balance;

Account(){

balance=5000;

}

public void deposit(double n){

balance=balance+n;

n("存款成功!");

}

public void withdraw(double n){

balance=balance-n;

n("取款成功!");

}

public void getbalance(){

n("当前账户余额为"+balance);

}

public static void main(String[] args) {

Account c=new Account();

ance();

n("请输入存款金额:");

Scanner sc=new Scanner();

double i=uble();

t(i);

ance();

n("请输入取款金额:");

double x=uble();

aw(x);ance();

();

}

}

3.

package mymaths;

public interface Myinterface {

int max(int a,int b,int c);

int min(int a,int b,int c);

}

class Zzr implements Myinterface{

public int max(int a,int b,int c){int temp;

if(a

temp=b;

else temp=a;

if(temp>c) return temp;

else return c;}

public int min(int a,int b,int c){

int temp;

if(a

temp=a;

else temp=b;

if(temp>c) return c;

else return temp;

}}

package mymaths;

public class interfaceTest {

public static void main(String[] args) {

int x,y;

Zzr c=new Zzr();

x = (3,5,8);

y = (6,8,9);

n("最小值为"+x+",最大值为"+y);

}}

4. package a1;

class Base{

public static Goods[] All = new Goods[2];//?

public String name;

public double price;

public String producer;

public int id,num;

public void showMe(){

n("**************"+name+"*************");

n("商品名称:"+name);

n("商品编号:"+id);

n("商品价格:"+price);

n("生产地"+producer);

n("数量"+num);

n("**************"+"end"+"*************");

}

public void showNum(){

n("************showNum***********");

n("商品名称:"+name);

n("商品id"+id);

n("数量:"+num);}}

class Goods extends Base{

public void sale(int n,double pay) throws Exc{

if(n>){

throw new Exc();

}

n("商品名称"+name);

n("商品价格:"+n+"*"+price+"="+n*price);

n("您缴费"+pay);

double money = pay-n*price;

if(money<0){

n("余额不足,您还需要缴费"+(-money));

}

else{

n("购买成功");

n("找您"+money);

-=n;}}

public void add(String name,int id,double price,String producer,int num){

= name;

= price;

er = producer;

= id;

+=num;

n("商品上架成功,以下为该商品的基本信息:");

();

All[id] = this;}}

public class Supermarket extends Base {

public void query(int id){

All[id].showMe();//why?

}

public void query(String name){

for(Goods g:All){

if(==name){

();}}}

public void cheak(){

for(Goods g:All){

m();}}

public static void main(String[] args){

// TODO Auto-generated method stub

Goods sofa = new Goods();

("sofa", 0, 1000, "太原", 20);

Goods phone = new Goods();

("phone", 1, 16, "太原理工", 30);

try{

(100,3000);

}

catch(Exc e){

n(sage());

n("请稍等,商品正在入库");

}

Supermarket s = new Supermarket();

();

(1);

(0);

("sofa", 0, 1000, "太原", 1);

("phone");}}

class Exc extends Exception{

Exc(){

super("商品库存不足!");}}

五、实验结果

1.

2.

3.

4.

六、讨论、心得

本次实验让我了解到想用程序解决实际问题时,最好写出三种代码:伪代码、产品代码、测试代码,这样才能快速的写出代码,并且实用性强。希望以后能通过实验了解更多运用java解决实际问题的方法,学好Java。

实验四 Java异常处理

一、 实验目的和要求

掌握异常的概念,以及如何定义、抛出和捕获处理异常。

二、 实验内容

1.做实验之前要求思考以下问题,作为预习内容;

① 错误和异常有何区别?查看Java异常类的关系图。

② 异常是如何抛出、捕获和处理的?

③ Java捕获和处理异常的结构式怎样的?

④ Try语句如何嵌套?Trow语句有何作用?Finally程序快的作用是什么?

2.运行下面的程序,理解异常的抛出、捕获与处理。

Import .*;

public class void main(String args[]){

public staic void main(String args[]){

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

int k;

try{

switch(i){

case 0: //divided by zero

int zero=0;

k=911 //zero

break;

case 1://null pointer

int b[]=null;

k=b[0];

break;

case 2; //array index out of bound

int c[]=new int[2];

k=c[9];

break;

case 3: //string index out of bound

char ch="abc".charAt(99);

break;

}

}catch(Exception e){

n("nTestcase#"+i+"n");

n(e);

}

}

}

}

3.在实验三中的超市、商品类中创建一个自定义异常类。

要求:在定义商品类时,若销售商品数量大于余额则作为异常处理(InsufficientFundsException)。

提示:

① 产生异常条件是某类商品销售数量大于库存额,因此是否抛出异常要先判断该条件。

② 确定产生异常的方法,应该在sale方法中产生异常Insufficient Funds

Exception。

③ 处理异常安排在调用sale的时候,因此sale方法要声明异常,由上级方法捕获并处理。

④ 要定义好自己的异常。

三、 主要仪器设备

使用的计算机惠普:硬件配置Win7、软件环境eclipse

四、实验代码

.1.(1)错误与异常的区别:

错误:指在程序编译时如果程序进入死循环,或递归无法结束,或内存溢出。错误只能在编程阶段解决,只能依靠其他程序干预,否则会一直处于非正常状态。

异常:指运算时除数为0,或操作数超过范围,或打开一个文件时发现文件并不存在,或欲装入的类文件丢失,或网络连接中断等。

(2) java提供了一种利用简单易行的方法检查和处理运行时产生的错误的异常处理机制,它是通过面向对象的方法来处理异常的。在java程序的执行过程中,如果出现了异常事件,就会生成一个异常对象。生成的异常对象将传递给java运行时系统,这一异常的产生和提交过程成为抛弃异常。当java运行时系统得到一个异常对象时,它将会沿着方法的调用栈逐层回溯,寻找处理这一异常的代码。找到能够处理这类异常的方法后,运行时系统把当前异常对象交给这个方法进行处理,这一过程称为捕获异常。

(3) 根据程序对错误与异常的处理方式,可以将java中的异常分为Error类,RuntimeException类和Exception类。其中Error类包括的是一些严重的程序不能处理的系统错误类,如内存溢出,虚拟机错误,栈溢出等。这类错误一般主要与硬件有关,与程序本身无关,通常由系统进行处理,程序本身无需去捕获和处理。程序运行过程中,可能出现RuntimeException类的异常数量相当大,对于运行时的异常类,如数组越界,算术异常等,应通过程序尽量避免而不是去捕获它。

(4) 为了避免程序运行时可能出现的错误,将程序代码放在try程序块中,紧跟在try语句后面包括一个catch语句,用来指定需要捕获的异常类型。

在程序中发生异常时,程序员可以抛出(throw)一个自定义异常类的实例,将其放到异常队列中去,并激活java的异常处理机制。

当抛出一个异常时,程序的执行就不再是线性的,这样就有可能导致方法的执行中断。在java语言中,使用finally语句来解决此类问题。Finally语句创建一个代码块,在try/catch语句执行后执行,不管是否抛出一个异常,系统都将执行finally语句的程序代码。

3.

package shiyan;

public class a1{

public static void main(String args[]){

try {

Shop sh = new Shop(100);

(200);

n("销售成功!");

} catch (InsufficientFundsException e) {

n(ng());

}

}

}

class Shop {

int num;

Shop(int num) {

= num;

}

public void deposite(int dAmount) {

num += dAmount;

}

public void sale(int dAmount) throws

InsufficientFundsException {

if (num < dAmount)

throw new InsufficientFundsException();

num = num - dAmount;

}

}

class InsufficientFundsException extends Exception {

private static final long serialVersionUID = 1L;

InsufficientFundsException() {

super("商品销售数量大于库存额!");

}

}

五、实验结果

2.

3.

六、讨论、心得

通过本次实验,熟悉掌握了Java的异常机制,try{}catch(){}finally{}的执行过程。通过new一个数组,从而通过数组的下标取出内容,当下标不合法时就会出现数组下标越界异常。通过catch捕获异常,并对异常作出处理。再通过将一个字符串的大写字母转换成小写字母,练习String的常用方法。同时了解了字符串的使用。

这仅仅是简单异常的处理,必须更进一步对异常熟悉。还有对字符串的其他方法进行练习并熟悉掌握。还需要在课下多多练习,熟悉它们。

实验五 多线程编程

一、实验目的和要求

(1) 现成的概念、线程的生命周期。

(2) 多线程的编程:扩展Thread类与使用Runnable接口。

(3) 使用多线程机制实现动画

二、实验内容

1.运行下面的程序,理解用创建Thread子类的方法实现多线程。

//S09_01_

Import .*;

class S09_01_Thread extends Thread {

int pauseTime;

String name;

public S09_01_Thread(int x,String n){

pauseTime=x;

name=n;

}

public void run(){

while(true){

try{

n(name+":"+new Date(tTimeMillis()));

(pauseTime);

}catch(Exception e){n(e);}

}

}

static public void main(String srgs[]){

S09_01_Thread tp1=new S09_01_Thread(1000,"Fast");

();

S09_01_Thread tp2=new S09_01_Thread(3000,"Slow");

();

}

}

2.运行下面的程序,理解用实现Runnable接口的方法实现多线程。

//S09_02_

Import .*;

class S09_02_Thread implements Runnable {

int pauseTime;

String name;

public S09_02_Thread(int x,String n){

pauseTime=x;

name=n;

}

public void run(){

while(true){

try{

n(name+":"+new Date(tTimeMillis()));

(pauseTime);

}catch(Exception e){n(e);}

}

}

static public void main(String srgs[]){

Thread t1=new Thread(new S09_02_Thread(1000,"Fast"));

();

Thread t2=new Thread(new S09_02_Thread(3000,"Slow"));

();

}

}

3.创建简单的程序,该程序将创建三个线程,每个线程应当显示它所运行的时间(可以考虑使用Date类或Calendar类)。

三、主要仪器设备

使用的计算机惠普:硬件配置Win7、软件环境eclipse

四、实验代码

3.package mymaths;

import ;

public class Xiancheng extends Thread{

public static void main(String[] args) {

Xiancheng t1=new Xiancheng();

();

Xiancheng t2=new Xiancheng();

();

Xiancheng t3=new Xiancheng();

();

}

public void run(){

n(""+ e()+" "+new

Date(tTimeMillis()));

}

}

五、实验结果

1.

2.

3.

六、讨论、心得

线程是提高cpu运行效率的方法,内容很重要,需要认真学习和理解。

实验六 图形用户界面编程

一、实验目的和要求

掌握文本组件、按钮和单、复选按钮组件的使用;掌握列表的使用,鼠标、键盘事件的处理;掌握布局控制的方法。

二、实验内容

1. 编写一个程序响应鼠标事件,当鼠标事件发生时,在状态条显示相应的时间信息。提示:使用showStatus(字符串)方法。

2. 试设计一窗口,内含一个按钮。开始运行时,按钮显示“Click Me”字样,当按钮按下时,按钮显示为“Click Me Again”字样,再按一次,则按钮显示“Click

Me”字样,依次循环。

三、主要仪器设备

使用的计算机惠普:硬件配置Win7、软件环境eclipse

四、 实验代码

1.

package mymaths;

import .*;

import Event;

import Listener;

import .*;

public class Click{

public static void main(String[] args){

JFrame frm=new JFrame();

out(null);

aultCloseOperation(_ON_CLOSE);

JButton btn=new JButton("请点击");

nds(45, 65,100, 200);

tentPane().add(btn);

ButtonHandle bur=new ButtonHandle(btn);

ionListener((ActionListener) bur);

nds(400, 400, 400,400);

ible(true);

}

}

class ButtonHandle implements ActionListener{

JButton btn;

public ButtonHandle(JButton btn){

=btn;

}

@Override

public void actionPerformed(ActionEvent e) {

n("当前时间为:"+new Date(tTimeMillis()));

}

}

2.

package mymaths;

import .*;

import .*;

public class Click{

JButton btn;

public static void main(String[] args){

JFrame frm=new JFrame();

out(null);

aultCloseOperation(_ON_CLOSE);

JButton btn=new JButton("Click me");

nds(45, 65,200, 300);

tentPane().add(btn);

ButtonHandle bur=new ButtonHandle(btn);

ionListener(bur);

nds(100, 200, 500, 600);

ible(true);

}

}

class ButtonHandle implements ActionListener{

JButton btn;

public ButtonHandle(JButton btn){

=btn;

}

public void actionPerformed(ActionEvent e) {

if (t().equals("Click Me")){

t("Click Me Again");

}

else t("Click Me");}}

五、 实验结果

1.

2.

六、讨论、心得

Graphic User Interface, (图形用户界面) :其实GUI其实只是一个图形界面,能比较形象的,生动的把模拟、运算结果表现出来。它只是一个包装外壳。您开发的程序,最好用这个包装起来,这样别人用的时候会方便很多很多. 具体的算法,运算,分析是相对独立与GUI存在的。换句话说,GUI可以只有外壳,而没有内容;或者你预先做好的算法都可以套进一个做好的GUI里去。(当然,GUI也是由m文件构成的。)

但另一个方面,GUI是用来人机交流的界面。所以,用户具体的行为,比如运行某一功能,暂停,重置,弹菜单,切换机面等等,在GUI中要精心设计。逻辑要精密,考虑要全面。


本文标签: 方法 程序 处理