实验指导书-Scanner版本

更新时间:2024-04-11 17:02:01 阅读量: 综合文库 文档下载

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

Java语言计算机科学与程序设计

实验指导书

胡洁萍 编著

山东大学计算机科学与技术学院

2009年9月

1

前言

《Java语言计算机科学与程序设计》是为计算机科学与技术学院和软件学院一年级开设的一门骨干课程,并且实验性很强。课程中讲授的许多内容如:基本数据类型、类、对象、方法、循环控制、继承、多态、文件处理、异常处理等,仅有课堂教学同学们是不能完全理解的,为了让同学们对课堂上讲授的内容能充分理解,培养同学们的创新及解决实际问题的能力,为将来的软件开发与应用打下良好的基础,我们安排了java上机实验。

本书是借鉴了我校前几年的实验大纲,同时在近几年辅导同学们上机练习的基础上完成的。特别是对于经常出错的问题在特别提示中再次强调,所以同学们在上机前一定要认真阅读特别提示。

在此还要特别感谢李学庆老师给予的大力支持。

胡洁萍

2

目录

目录 .................................................................................................................................................. 1 实验环境介绍 ................................................................................................................................... 3

实验平台及安装 ....................................................................................................................... 3 实验要求及SavitchIn.java的下载地址 .................................................................................. 3 Eclipse入门 .............................................................................................................................. 4 实验一 Eclipse及Java入门 ........................................................................................................... 6

实验内容 ................................................................................................................................... 6 实验步骤 ................................................................................................................................... 7

1 利用Eclipse开发环境写自己的第一个Java程序(HelloWorld) ..................................... 7 2 SavitchIn.java的引入 .................................................................................................. 12 3 课本光盘提供的Java源代码在Eclipse环境中的使用 .......................................... 13 4 调试FirstProgram ....................................................................................................... 15

实验二 Java程序的输入输出 ....................................................................................................... 17

实验目的 ................................................................................................................................. 17 实验内容 ................................................................................................................................. 17 特别提示 ................................................................................................................................. 17 实验三 分支、循环的使用 ........................................................................................................... 23

实验目的 ................................................................................................................................. 23 实验内容 ................................................................................................................................. 23 特别提示 ................................................................................................................................. 24 附:Math类中的静态方法 ................................................................................................... 24 实验四 字符与字符串 ................................................................................................................... 25

实验目的 ................................................................................................................................. 25 实验内容 ................................................................................................................................. 25 实验五 类的实例化与方法调用 ................................................................................................... 25

实验目的 ................................................................................................................................. 25 实验内容 ................................................................................................................................. 26 特别提示 ................................................................................................................................. 26 附:利用对话框输入输出 ..................................................................................................... 27 附:引入包 ............................................................................................................................. 17 实验六 数组 ................................................................................................................................... 30

实验目的 ................................................................................................................................. 30 实验内容 ................................................................................................................................. 31 有关输出日历的两点说明 ..................................................................................................... 31 特别提示 ................................................................................................................................. 32 附:Eclipse中命令行参数的输入方法 ................................................................................ 32 实验七 继承和多态 ....................................................................................................................... 33

实验目的 ................................................................................................................................. 33 实验内容 ................................................................................................................................. 34 特别提示 ................................................................................................................................. 34 实验八 文件的输入输出 ............................................................................................................... 35

1

实验目的 ................................................................................................................................. 35 实验内容 ................................................................................................................................. 35 特别提示 ................................................................................................................................. 35 实验九 链表(不计成绩) ........................................................................................................... 36

实验目的 ................................................................................................................................. 36 实验内容 ................................................................................................................................. 37 实验十 递归(选作,不计成绩) ............................................................................................... 37

实验目的 ................................................................................................................................. 37 实验内容 ................................................................................................................................. 38

2

实验环境介绍

实验平台及安装

J2SE JDK 6 + Eclipse Galileo

1. J2SE安装

下载J2SE JDK 6u16 ( http://java.sun.com/javase/downloads/index.jsp) 双击自动安装 2. Eclipse安装

Eclipse SDK Galileo (http://www.eclipse.org/downloads/index.php) C或D盘根目录下解压缩,不需要安装

实验要求及SavitchIn.java的下载地址

实验要求可以从ftp上下载。地址为ftp://211.87.224.149:2121

双击java课程设计2008,将java实验手册复制到本机d盘,同时也将SavitchIn.java拷贝下来备用。

注意:一定要将文件复制到本机然后再打开,不要直接从ftp上打开。

3

Eclipse入门

双击桌面的eclipse快捷方式,将打开eclipse应用程序。

在初次加载Eclipse时,我们会看到一个如图所示的提示框,要求选择工作区,工作区是指在计算机中保存项目的文件夹,以后你所编写的java程序可以都放在这个文件夹中。建议大家选择d盘或e盘,因为我们机房的c盘有保护,如果存放到c盘,下一次上机可能你的文件就不存在了。假设我们选择在d盘的根目录下写一个以自己名字命名(这个名字是自己随便起的,便于自己快速找到该文件夹)的工作区,如图,然后单击ok。

进入eclipse开始界面

4

这时,我们可以看到d盘根目录下多了一个文件夹hjp。

单击workbench图标,进入如图所示的eclipse开发环境,它符合windows传统界面风格,由上到下依次为菜单栏、工具栏、客户区、状态栏 客户区又分为文件管理器、代码区和运行结果的区域。如下图

源代码区

文件管理器

运行结果

5

? 文件管理器:可以管理目录以及Java文件,包括浏览、新建、删除、打开、运行等操作。一般的,鼠标单击要选择的文件或者目录后:双击鼠标左键,可以在源代码区打开该文件,进行编辑;右单击鼠标将有一个弹出式菜单,列举了所有可以对该文件或目录进行的操作。 ? 源代码区:可以编写Java程序

? 运行结果区:控制台程序的输入输出区域

如果不小心关闭了某个区域,可以从菜单栏Window->Show View的下拉菜单中单击某一项显示,例如要重新显示文件管理器只要单击Window->Show View->Package Explorer即可。

实验一 Eclipse及Java入门

实验内容

1) 2) 3) 4)

利用Eclipse开发环境写自己的第一个Java程序(HelloWorld) SavitchIn.java的引入

掌握课本光盘提供的Java源代码在Eclipse环境中的使用方法 利用Eclipse环境调试第一章中的Java程序

6

实验步骤

1 利用Eclipse开发环境写自己的第一个Java程序(HelloWorld) 1) 创建Java项目(project)

一个java程序一般由几块组成,一般每个类占一个单独的文件,每个类单独编译,可以把这多个相关的类放到同一个项目中。创建项目的步骤如下: a)“File→New→Project...”

b) 在弹出的“New Project”对话框中,选择“Java Project”,单击“Next”

7

c) 在“New Java Project”对话框中,输入项目名字。在“Project name”中填入“HelloWorld”,不需要进行其他设置,直接点击“Finish”按钮。

完成后,在文件管理器中出现HelloWorld项目如下图

刚才已建的工作区D:\\hjp文件夹下出现helloword文件夹

8

2) 在项目中加入HelloWorldApp类

选中HelloWorld项目后,单击鼠标右键,出现右键菜单,选择“New→Class”,如上图。

在弹出的对话框New Java Class中,Name框中输入“HelloWorldApp”,并且在“public static void main(String[] args)”选项前面打上勾。如下图。最后,单击“Finish”按钮。

9

单击“Finish”按钮后,对话框消失,出现下图界面,对比观察文件管理器的变化,同时可以在代码管理器中写HelloWorldApp的代码了。

注意到HelloWorldApp代码已经生成一部分了,包括类以及main方法。在main方法中加入一行代码:

System.out.println(\

在输入的过程中,可能会出现帮助信息,可以尝试着使用这些帮助。红色的下划线表示有语法错误,在该条语句输入完之前,可以不去在意。

10

3) 运行HelloWorldApp

在运行程序前最好保存一下你的源程序,以防运行过程中出现不可预测的错误。如下图在源代码区域选择右键菜单中的RunAs->Java Application

如果没有保存修改过的源代码,会出现一个Save and Launch对话框,提示保存对于代码的修改,选择Save按钮。

11

程序结果可以在控制台看到。如下图:

2 SavitchIn.java的引入

SavitchIn.java是本书的作者为我们写的类,但并不是java系统自带的,所以如果要使用需要引入。在同一目录下的文件中的类可以随便引用,所以我们只要将SavitchIn.java拷贝到D:\\hjp\\helloword目录下即可。

12

转换到eclipse开发环境中,右单击文件管理器区域->refresh,即可看到SavitchIn.java

3 课本光盘提供的Java源代码在Eclipse环境中的使用

1)将光盘中的SourceCode目录拷贝到硬盘中,例如D:\\

2)用上面类似的方法,创建一个新的项目,项目对话框的填写如下图,尤其注意Directory文本框中的目录名称填写是否正确:

13

选择Finish按钮后,创建了项目ch01,展开项目ch01,看到第一章中的几个java源程序。

3)通过双击FirstProgram.java打开该文件,可以在源代码区看到代码了,注意可以通过代码区上面的文件名标记切换打开的源代码(如下图)。

4)按照前面讲的方式,运行源代码,看看结果。

14

4 调试FirstProgram

1)定义断点:通过双击图中所示的区域,可以对某一行设置断点(设置成功后,有蓝色的圆点标记,再次双击,取消断点,圆点消失)。

2)启动调试:右键菜单,选择DebugAs

3)得到如下图的调试页面后,单击“单步调试”按钮,观察代码区,变量区以及控制台的变化。

15

注意:当程序单步执行到下图的时,不要忘记程序等着你输入呢——在控制台输入字母,然后回车

answerLetter = SavitchIn.readLineNonwhiteChar();

试着多调试几次,每次输入不同的字母。

点击箭头指向的图标,可以切换到源代码页面。

16

实验二 Java程序的输入输出

实验目的

1.了解体会Java的输入输出的编程与操作。

2.学习掌握Java Application字符界面下的输入输出。

实验内容

编写一个Java Application程序。

1)从控制台读取一个三位整数

2)将其倒序输出(例如,输入123,则输出结果为321)

说明:从控制台读入的是一个int类型,利用整除和取余对其倒序输出。

特别提示

1. Java是区分大小写的,一定要注意。例如System中的S、Scanner中的S、I及nextLine中的L等等。

2. 程序是由一系列语句组成,必须在语句末尾加“;”,而且java程序中的符号必须是英文状态下输入的,否则将出现语法错误。

3. Java中每个类处于单独的文件中,类名必须和文件名相同。可以运行的类必须包含 public static void main(String[] args),不包含main方法的只能编译。

4. 要注意程序界面的友好性,例如在要求用户从界面输入一个整数前,应提示用户。Scanner scan = new Scanner(System.in);

System.out.println(“please input an integer:”); scan.readLineInt(a);

5. 除法运算符“/”是取整运算,直接丢弃掉小数点后面的部分。

附:引入包

我们可以把常用的类定义组成一个包,通过import语句在程序中使用这些类,没有必要把包中的类复制到程序所在的目录,而且多个工程可以使用包中的类。下面就介绍一下包的引入步骤。

17

第一步:建立一个公共包pubpackage(以SavitchIn.java为例,可以在

包中加入多个类)

假设我们在d盘根目录已建立的工作空间hjp中又建立了一个工程pubpackage,在工程pubpackage中新建包pubpackage,将SavitchIn.java复制到包pubpackage中。如图所示

在eclipse中打开SavitchIn.java,在文件的最开头加上 package pubpackage;

18

第二步:生成.jar文件

右单击包pubpackage,从弹出的快捷菜单中选择Export?

双击JAR file

在弹出的对话框中输入要把压缩包保存的目的地和文件名,以.jar为扩展名。

19

这样,在d盘的根目录下就能够看到刚才生成的文件pubpackage.jar

第三步:将.jar文件引入到要使用这些类的工程中

右单击HelloWord工程(将要在该工程中使用pubpackage包中的类),从弹出的快捷菜单中选择Properties,弹出Properties for helloword对话框

20

单击左面的Java Build path,从右面选择Libraries选项卡,单击Add External JARs按钮

从JAR Selection对话框中选择要引入的包,单击打开

21

从Properties for helloword对话框中就可以看到pubpackage.jar了,单击ok按钮

此时在eclipse中就可以看到pubpackage.jar

第四步:使用import语句引入包

22

在要使用SavitchIn类中的方法的文件中,package语句之后加入语句 import pubpackage.SavitchIn;那么在这个文件中就可以使用SavitchIn的所有的方法了。

实验三 分支、循环的使用

实验目的

掌握结构化程序设计的分支结构。 学习用if /else语句实现单分支。

学习用if /else语句和swich语句实现多分支。 掌握结构化程序设计的循环结构。

学习使用while语句、do-while语句、for语句实现循环。

学习控制循环终止条件、循环的正常退出、使用continue语句、break语句。

实验内容

1. 编写一个Application程序,可以计算方程输出ax2 + bx + c = 0的根,a,b,c三个系数由键盘输入

2. 编写一个Application程序,从键盘输入10个整数,计算出它们的算术平均数、最大值和最小值。

3. 任给一个自然数n,在控制台打印边长为n的菱形。

23

例如:n=3时

* *** ***** *** *

特别提示

1. 布尔表达式中,判断两个量a、b是否相等时,应写成a==b;若写成a=b表示把b的值赋给a,并不是一个布尔表达式,将出现语法错误:Type mismatch: cannot convert from int to boolean

2. 布尔表达式中不能用连不等式。例如1010 && i<20 3. if语句、while语句和for语句中布尔表达式后不要加分号(;),例如 if (a>=3) ; a=a+b;

表示如果满足条件,执行一条空语句,同时整个if语句结束,然后执行下一条语句,所以上例中a为任何值都将执行a=a+b;。

特别是在while循环中,将造成无限循环。例如while( i<=100 ) ; i++;因为循环体为空,无法更改i的值,所以循环将一直执行下去。 4. 而do-while();语句中,while后面的表达式后必须加分号。

5. 语句中如果满足条件时要执行多条语句或者循环体中有多条语句,一定要将这些语句用大括号括起来。

6. else总是与最邻近的尚未配对的if配对。如果要更改配对原则,用大括号。 7. switch语句中,若只执行一个情况项就退出switch语句,一定不要忘记加break;

8. 尽量不要在循环体中声明变量,如果在循环体声明变量且初始化,那么每次循环都要为变量申请内存且为其赋值,影响运行效率,甚至出现逻辑错误。 9. 算术运算符“/”中,如果符号两边的数都为整型,那么得到的结果也为整型,所以为了得到浮点型,应该使其中的一个数为浮点型。例如求平均数,可以写成sum/10.0

附:Math类中的静态方法

Math类中的静态方法在书中280页的图5.9中给出,我们可以直接通过在方法名前加Math.来使用其中的方法,例如求一个数a的平方根,可以使用方法Math.sqrt(a)获得。

24

对于Math类中的方法需要注意几个问题

? round(a)方法是对数a四舍五入,如果a为double类型,它的返回值就为long类型,所以如果这时要把round(a)的值赋给一个int型变量,需要进行强制类型转换(int)Math.round(a)。

? 同理ceil()、floor()的返回类型为double型,如果要赋给某个int型变量,也需要进行强制类型转换。

? pow(a,b)表示a的b次方,注意参数顺序不能颠倒。

实验四 字符与字符串

实验目的

1. 掌握语言基础类库中System 、Math 、数据类型等类的使用。 2. 掌握字符串的使用。

实验内容

1.编写一个程序,接受用户输入的一段英文文字,统计出其中的字符个数、单词个数和句子的个数。(设句子以“。”“!”“?”结束,单词之间利用空格分隔)。

特别提示

1. 在java中,System 、Math 、String、数据类型等类都在java.lang包中,系统将会自动引入。

2. String类的方法在书中71页的图2.6中给出。String是一个类类型,所以在比较两个String对象所包含的内容是否相等时,不能用==,要通过方法equals来实现。

实验五 类的实例化与方法调用

实验目的

1.掌握定义类、创建对象、使用类与对象。

25

2.掌握类及成员的修饰符的使用。 3.掌握构造函数的使用。

4.掌握如何定义方法和调用方法。 5.掌握形式参数与实际参数的结合过程。

实验内容

1. 编写一个Application程序MyDate.java,建立日期类,接受用户输入的年、月、日,完成日期增加若干天得到新的日期,日期推前若干天得到新的日期,日期与日期间相差多少天的计算。

2. 编写一个彩票中奖模拟程序,实现下述功能:创建六个筛子,每个筛子可以定制有多少个面(一般6-30);投掷六个筛子,得出六个开奖数值;模拟若干参与者,进行赌采,根据开奖数值,给出猜对的成绩。

特别提示

3. 自定义类及使用的步骤:

a) 首先,我们生成一个文件,文件名与类名相同如第一题,文件名为

MyDate.java,那么类名也必须是MyDate,在类定义中定义其变量及其方法

b) 然后,在main方法中(这个方法我们可以写在上面的文件中,也可以重

新生成一个文件,注意新生成的文件类名与文件名同样必须相同)我们生成MyDate类的对象,分两步:

i. MyDate date;//创建存储(MyDate对象)地址的变量

ii. date = new MyDate(); //为MyDate对象分配存储空间,并将其

地址赋给date

c) 生成了对象以后,就可以利用date对象来调用MyDate类定义中的方法

了,例如date.dayOfMonth(3); 下面的例子只是简单的说明其步骤,方法只有一个,而且方法中还没有任何代码。

public class MyDate {

public void dayOfMonth(int month){ //添加代码 }

public static void main(String[] args) { // TODO Auto-generated method stub MyDate date;

26

date = new MyDate(); date.dayOfMonth(3); } }

4. 静态方法可以通过类名而不是通过对象来调用,所以若要在静态方法定义中调用非静态方法,必须先创建一个对象,并通过该对象来调用非静态方法。例如main方法是一个特殊的静态方法,不能直接调用非静态方法。

5. 闰年的计算方法:公元纪年的年数可以被4整除而不能被100整除即为闰年或者能被400整除的也为闰年。如2000年是闰年,而1900年不是。

附:利用对话框输入输出

我们可以利用JOptionPane类实现数据的输入输出。JOptionPane类属于javax.swing 包。所以应在文件的头部包含有下列语句 import javax.swing.JOptionPane;

利用JOptionPane类可以定制四种不同种类的标准对话框。

? ConfirmDialog 确认对话框。提出问题,然后由用户自己来确认(按\或\按钮)

? InputDialog 提示输入文本 ? MessageDialog 显示信息

? OptionDialog 组合其它三个对话框类型。

这四个对话框可以采用showXXXDialog()方法来显示。如: ? showConfirmDialog() 显示确认对话框、 ? showInputDialog() 显示输入文本对话框、 ? showMessageDialog() 显示信息对话框、 ? showOptionDialog() 显示选择性的对话框。

JOptionPane的所有方法都是静态方法(static),所以这些方法可以直接用JOptionPane调用。

1. 显示MessageDialog

当我们想通过窗口输出结果信息的时候,一般使用MessageDialog。该对话框只包含信息和ok按钮。

1) public static void showMessageDialog (Component parentComponent,

Object message) 调出标题为 \的信息消息对话框 2) public static void showMessageDialog (Component parentComponent,

Object message, String title, int messageType) 该对话框的标题为 title,消息类型为 messageType

27

3) public static void showMessageDialog (Component parentComponent,

Object message, String title, int messageType,Icon icon) 参数说明:

? parentComponent:指示对话框的父窗口对象,一般为当前窗口。也可以为null即采用缺省的Frame作为父窗口,此时对话框将设置在屏幕的正中。 ? message:指示要在对话框内显示的描述性的文字,一般为String类型。 ? title:对话框的标题栏所显示的文字。

? messageType可以时下列常数:ERROR_MESSAGE(错误图标,叉号)、

INFORMATION_MESSAGE(信息图标,为反惊叹号)、WARNING_MESSAGE(惊叹号)、QUESTION_MESSAGE(问号)、PLAIN_MESSAGE(没任何图标) ? Icon:在对话框内要显示的图标

例如:可以用如下方法来显示一个信息对话框

JOptionPane.showMessageDialog( null , \要显示的信息内容\标题\JOptionPane.ERROR_MESSAGE) ;

2. 显示ConfirmDialog

用于显示一个没有输入区的对话框,并返回使用者在选项区所选定的按钮

1) public static int showConfirmDialog (Component parentComponent,

Object message)

显示一个带有选项按钮 Yes、No 和 Cancel的对话窗口,并返回用户的选项(Yes=1、No=2, Cancel=3)值。窗口标题为 Select an Option。 2) public static int showConfirmDialog(Component parentComponent,

Object message, String title, int optionType) 3) public static int showConfirmDialog(Component parentComponent,

Object message, String title, int optionType, int messageType) 4) public static int showConfirmDialog(Component parentComponent,

Object message, String title, int optionType, int messageType, Icon icon)

? optionType:对话框底部显示的按钮选项。DEFAULT_OPTION(只有一个预设的ok按钮)、YES_NO_OPTION(有两个按钮yes和no)、YES_NO_CANCEL_OPTION、OK_CANCEL_OPTION。

3. 显示InputDialog

显示一个有输入区的对话框,并返回使用者在输入区所输入的字符串

1) public static String showInputDialog (Component parentComponent,

Object message) 显示请求用户输入内容的问题消息对话框

28

2) public static String showInputDialog (Component parentComponent,

Object message, Object initialSelectionValue) 输入值将被初始化为 initialSelectionValue 3) public static String showInputDialog (Component parentComponent,

Object message, String title, int messageType) 该对话框的标题为 title,消息类型为 messageType

说明: 1) 程序把用户的输入作为字符串保存,所以如果希望的得到的是int型(也可

能是其他的原始数据类型),我们必须把字符串转换为对应的数字,因为每个原始数据类型都对应着一个包装类,通过相应的parseXXX方法可以将String类型转换为原始数据类型。例如,假如我们希望从InputDialog得到一个int类型,可以使用语句Integer.parseInt(str) String str ;

str=JOptionPane.showInputDialog(null, \ int num=Integer.parseInt(str);

2) 在编写具有窗口界面的程序时,我们通常需要通过下面的语句来结束程序的

运行:System.exit(0);否则程序无法正常退出。

4. 例:

import javax.swing.JOptionPane;

public class TestJOptionPaneApp {

public static void main(String[] args) {

String str ; int confirm=0;

double count1,count2; while (confirm==0){

str = JOptionPane.showInputDialog(null, \请输入被乘数\,

\输入窗口1\,JOptionPane.INFORMATION_MESSAGE);

count1=Double.parseDouble(str);

str = JOptionPane.showInputDialog(null, \请输入乘数\,

\输入窗口2\,JOptionPane.INFORMATION_MESSAGE);

29

count2=Double.parseDouble(str); JOptionPane.showMessageDialog(null,

count1+\+count2+\+count1*count2);

confirm=JOptionPane.showConfirmDialog(null, \还要继续乘法运算吗?

\,\选择窗口\,JOptionPane.YES_NO_OPTION);

}

JOptionPane.showMessageDialog(null, \谢谢使用\);

}

System.exit(0); }

实验六 数组

实验目的

熟练掌握一维及二维数组的使用

30

实验内容

由键盘输入年份,编写一个程序显示当年的日历,用Application程序实现。

有关输出日历的两点说明

1. 求某一年的1月1日是星期几的方法

假设当前年份为y,并忽略闰年,则从公元元年1月1日到y-1年共有365*(y-1)天,加上闰年多出来的天数,即加上1*((y-1)/4-(y-1)/100+(y-1)/400),\为整除,得:365*(y-1)+((y-1)/4-(y-1)/100+(y-1)/400)。

补上一个x(x是与公元元年1月1日是星期几有关的一个0~6的整数),并将这个表达式赋给变量t,即:

t=x+365*(y-1)+((y-1)/4-(y-1)/100+(y-1)/400)再用t除以7,余几即为星期几(余0为星期日)。 下面讨论x的求法:

如果知道公元元年1月1日是星期几,就可以直接得到x的值,但现在公式还没有求出来,不知道公元元年1月1日是星期几。不过没关系,毕竟知道最近的日期是星期几。不妨看一下2001年1月1日是星期几,结果是星期一,代入公式得t=x+730516,用730516除以7,得104355,余数是1,则为了保证2001年1月1日是星期一,取x 为0,至此,得到了完整的公式: t=365*(y-1)+((y-1)/4-(y-1)/100+(y-1)/400) 再将它做一下改进,我们将公式变形为:

t=(52*7+1)*(y-1)+((y-1)/4-(y-1)/100+(y-1)/400) 利用星期的周期性,将52*7*(y-1)从公式中删除,得: t=(y-1)+((y-1)/4-(y-1)/100+(y-1)/400)

所以求某一年的1月1日是星期几的最常见的公式为: W = [Y-1] + [(Y-1)/4] - [(Y-1)/100] + [(Y-1)/400]

公式中的[...]指只取计算结果的整数部分。算出来的W除以7,余数是几就 是星期几。如果余数是0,则为星期日。

2. 要求显示日历的格式(以2009年9月为例): 2009-9

日 一 二 三 四 五 六 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30

31

特别提示

1. 假设我们已经定义了一个日期类MyDate,MyDate [ ] date=new MyDate[3];仅仅是创建了一个数组,数组中有三个变量date[0] 、date[1]、 date[2],用于存放MyDate对象的地址,在使用date[i]之前,必须还要有如下的语句 for (int i=0; i<3; i++ ) date[i]=new MyDate();

这样才为数组中的每个元素申请了内存空间。这在数组元素为类类型变量的时候要特别注意。

2. length为数组的公共实例变量,指数组的长度(可容纳的元素个数)。date数组的长度可通过date.length得到。而数组的下标总是从0开始,所以最后一个下标应比数组的长度小1即date.length-1。所以遍历数组时应为

for (int i=0; i< date.length-1; i++ ) 若数组下标越界,编译时无任何出错信息,但运行时报错:ArrayIndexOutOfBoundsException

附:Eclipse中命令行参数的输入方法

main方法的参数是一个String类型的数组,数组名为args,我们也可以用其他标识符替代args,但习惯上该参数都用args。运行时,系统会自动提供一个默认字符串作为main的默认实参。有时候我们希望自己设置,方法如下: 源代码窗口,右单击弹出快捷菜单,选择Run As->Run?

将弹出Run对话框,选择Arguments选项卡,从Program arguments里添加参数,以非空白字符为分隔符

32

public class HelloWordApp {

public static void main(String[] args) {

// TODO Auto-generated method stub

System.out.println(\的第一个参数args[0]为:\+args[0]); System.out.println(\的第二个参数args[1]为:\+args[1]); System.out.println(\的第二个参数args[2]为:\+args[2]); System.out.println(\的第二个参数args[3]为:\+args[3]); } }

程序的运行结果为

main的第一个参数args[0]为:hello main的第二个参数args[1]为:good main的第二个参数args[2]为:morning main的第二个参数args[3]为:yes

实验七 继承和多态

实验目的

1.掌握继承和多态的概念与实现方法。

33

2.掌握如何从已有的类中派生子类并继承父类。 3.掌握方法的覆盖和重载。

实验内容

设计一个通用的排序算法,作为验证,自定义学生类,矩形类,可以利用该排序算法对学生按照ID以及Name进行排序;对矩形按照面积进行排序。

说明:

一个通用的排序程序只要知道数组中任意两个元素如何比较大小就可以完成排序。因此,设计一个父类,包含 int compare(object a, object b)方法,其他所有子类按照自己的方式实现compare。

特别提示

1. 构造方法不能被继承,如果没有显式调用父类的构造方法,系统将自动调用父类的默认构造方法。如果想要显式调用,使用super();(也可能有参数)作为子类构造方法的第一个语句。

2. 当子类和父类中具有相同的方法名,且方法所带有的参数数目和类型都相同时,我们说子类方法覆盖了父类方法。如果想要在子类对象中调用父类的方法,可使用super.方法名(参数)来实现。

3. 变量决定了要使用的方法,而对象决定了使用方法的哪一个定义。例如: class Animal{

public void speak()

{System.out.println(“Animal Speak!”);} }

class Dog extends Animal{

public void speak(){bark();}

public void bark(){System.out.println(“Woof!”);} }

在main方法中有如下语句: Animal pet;

Dog aDog=new Dog(); pet=aDog; pet.bark();

最后一个语句将出现编译错误:the method bark() is undefined for the type Animal。因为pet声明为Animal变量,不能够调用Dog中的方法。 4. 对象可以隶属于多个类型,即派生类对象可以赋给任何祖先类型的变量,我们可以通过instanceof运算符来检查对象是否隶属于某一类型。

34

object instanceof Class_Name

如果object属于Class_Name类型,则该表达式返回true,否则返回false 5. 不能把父类对象赋给子类变量,有时候为了需要想要这么赋值时,必须进行强制类型转换。例如 Person p=new Person(); Student stu; stu=(student)p

实验八 文件的输入输出

实验目的

1.掌握建立、读写顺序文件的方法。

实验内容

为学生档案建立一个顺序文件。每个学生有:学号、姓名、性别、10门功课的成绩、平均成绩,文件建成后,再从键盘输入学号,进行查询,查到则输出该生的所有信息,否则给出未查到的提示。

特别提示

1. 在块内声明的变量是局部变量。当声明处于try块内时,在try块外不能使用该变量,所以对于PrintWriter类的对象一般在块外声明。例如: PrintWriter outputStream; try {

outputStream=new PrintWriter(new FileOutputStream(“out.txt”)); }

catch??

注意,若写成是不对的

PrintWriter outputStream; try {

PrintWriter outputStream=

new PrintWriter(new FileOutputStream(“out.txt”)); }

catch??

这表示在try块内又声明了一个变量,它与在块外声明的变量并非同一变量,当退出try块的时候,块内的outputStreasm变量就消失了,所以并没有为块外的outputStreasm流建立与文件的连接。

2. 大部分流类的方法都抛出异常,我们可以用try-catch块捕获异常,也可以

35

在调用该方法的方法头部继续使用throws子句。

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

new PrintWriter(new FileOutputStream(“out.txt”)); ?? }

3. 处理文本文件的流类PrintWriter、BufferedReader以及处理二进制文件的流类ObjectInputStream、ObjectOutputStream它们的构造方法中都不存在直接将文件名作为参数的方法,所以需要另外的流类来通过文件名与文件相连。 inputStream=new ObjectInputStream(

new FileInputStream(“data.txt”)); inputStream=new BufferedReader(new FileReader(“data.txt”)); 当文件所在的目录与我们的java程序不再同一目录的时候,建议大家使用绝对路径

4. BufferedReader类的方法read()的返回值为int类型,方法头为

public int read() throws IOException若要取得字符型数据,要进行强制类型转换。

char ch=(char)inputStream.read(); 超出文件末尾时返回-1。

5. 使用ObjectInputStream类的writeObject方法和ObjectOutputStream类的readObject方法时,必须将读写文件的对象所属的类实现Serializable接口,例如

public class Student implements Serializable {//类定义 }

6. FileInputStream类的方法read()的返回值为object类型,在实际读入数据时一定要进行强制类型转换

Student stu=(Student)inputStream.readObject();

7. 将数据写入文件后,在读文件的数据之前,一定要关闭输出流,否则文件没有保存已写入的信息。

实验九 链表(不计成绩)

实验目的

1.学习使用链表。 2.掌握建立有序链的方法。

36

实验内容

编写一个程序:

? 建立两条升序链表(带有头节点); ? 将两条链合并成一条升序链; ? 三条链的数据要分别显示出来。

可以参考下面伪代码

MyList Merge(链表 m1, 链表 m2){ 创建链表m3, m3.tail = m3.head;

While (m1 有节点 && m2有节点){ If (m1.head.data< m2.head.data)//M1中第一个节点和M2中第一个节点,比较大小; { m3.tail.next = m1.head; m3.tail= m1.head; m1.head = m1.head.next; //将数据较小的节点,从原链表m1中取出,加入M3尾部; }else { …….

//将数据较小的节点,从原链表m2中取出,加入M3尾部; }

}

if (m1 ==null) 将m3.tail.next =m2 //将m2加入M3尾部; else m3.tail.next = m1; return m3 }

实验十 递归(选作,不计成绩)

实验目的

掌握递归方法的使用

37

实验内容

在一个8*8的棋盘上放置8个皇后,使它们不能互相攻击,即在同一行、同一列、同一对角线上不能有多于一个以上的皇后,求所有放置的方案。 可以参照下面提供的最基本的方法。 附:解决8皇后时,采用回溯法。在安放第 i 行皇后时,需要在列的方向从 1 到 n 试探( j

= 1, …, n ):首先在第 j 列安放一个皇后,如果在列、主对角线、次对角线方向有其它

皇后,则出现攻击,撤消在第 j 列安放的皇后。如果没有出现攻击,在第 j 列安放的

皇后不动,递归安放第 i+1行皇后。 1. 解题时设置 4 个数组:

col [n] :col[i] 标识第 i 列是否安放了皇后

md[2n-1] :md[k] 标识第 k 条主对角线是否安放了皇后 sd[2n-1] :sd[k] 标识第 k 条次对角线是否安放了皇后 q[n] :q[i] 记录第 i 行皇后在第几列

2. 利用行号i和列号j计算主对角线编号k的方法是k = n+i-j-1;计算次对角线 编号k的方法是k = i+j。n皇后问题解法如下: void Queen( int i ) {

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

if ( col[j] == 0 && md[n+i-j-1] == 0 && sd[i+j] == 0 ) { //第 i 行第 j 列没有攻击 col[j] = md[n+i-j-1] = sd[i+j] = 1; q[i] = j; //在第 i 行 第 j 列安放皇后 if ( i == n ) { //输出一个布局 for ( j = 0; j <= n; j++ ) print(q[j]); } else Queen ( i+1 ); //在第i+1行安放皇后 }

col[j] = md[n+i-j-1] = sd[i+j] = 0; q[i] = 0; //撤消第 i 行第 j 列的皇后 }}

38

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

Top