java第七章

合集下载

Java面向对象程序设计案例教程(王贺) 第七章习题答案[5页]

Java面向对象程序设计案例教程(王贺) 第七章习题答案[5页]

1.选择题(1)下列说法中错误的是()A.对Swing构件只能设置一个边框B.Swing构件能建立组合边框或自己设计边框C.在Swing构件中,按钮可以使用图标修饰D.Swing构件支持键盘代替鼠标的操作(2)向容器添加新构件的方法是(A)A. add( )B. insert( )C. fill( )D. set( )(3)关于布局管理器LayoutManager,下列说法中正确的是(D)A.布局管理器是用来部署Java应用程序的网上发布的youtManager本身不是接口C.布局管理器是用来管理构件放置在容器中的位置和大小的D.以上说法都不对(4)JTextField类提供的GUI功能是(A)A.文本区域 B.按钮 C.文本字段 D.菜单(5)将GUI窗口划分为东、西、南、北、中五个部分的布局管理器是(D)A.FlowLayout B.GridLayout C. BoxLayout D. BorderLayout(6)关于Panel,下列说法中错误的是(D)A. Panel可以作为最外层的容器单独存在B. Panel必须作为一个构件放置在其他容器中C. Panel可以是透明的,没有边框和标题D. Panel是一种构件,也是一种容器2.填空题(1)( BorderLayout )包括5个明显的区域:东、南、西、北、中。

(2)Java的图形界面技术经历了两个发展阶段,分别通过提供AWT开发包和(Swing)开发包来体现。

(3)可以使用setLoaction( )、setSize( )或(setBounds( ) )中的任何一种方法设置组件的大小或位置。

(4)( GridLayout )布局管理器使容器中各个构件呈网格布局,平均占据容器空间。

(5)框架的默认布局管理器( BorderLayout)。

3.编程题(1)制作如图7-20所示的登录界面。

图7-20package com.zhouzhou;import java.awt.*;import javax.swing.*;public class Demo11 extends JFrame {// 定义组件JPanel jp1, jp2, jp3;JLabel jlb1, jlb2;JButton jb1, jb2;JTextField jtf1;JPasswordField jpf1;public static void main(String[] args) {// TODO Auto-generated method stubDemo11 d1 = new Demo11();}// 构造函数public Demo11() {jp1 = new JPanel();jp2 = new JPanel();jp3 = new JPanel();jlb1 = new JLabel("用户名");jlb2 = new JLabel("密码");jb1 = new JButton("登录");jb2 = new JButton("取消");jtf1 = new JTextField(10);jpf1 = new JPasswordField(10);// 设置布局管理(上面忘记:extends JFrame,这里出错了) this.setLayout(new GridLayout(3, 1));// 加入各个组件jp1.add(jlb1);jp1.add(jtf1);jp2.add(jlb2);jp2.add(jpf1);jp3.add(jb1);jp3.add(jb2);// 加入到JFramethis.add(jp1);this.add(jp2);this.add(jp3);this.setSize(250, 150);this.setTitle("登录");this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);this.setVisible(true);}}(2)制作如图7-21所示的选择界面。

《Java基础入门》_课后习题答案大一计算机专业7

《Java基础入门》_课后习题答案大一计算机专业7

《Java基础入门》课后习题答案第7章IO(输入输出)一、填空题1、Java中的I/O流,按照传输数据不同,可分为:字节流、字符流2.在Buffer与Channel交互时,数据从:Channel、读取到Buffer 中,或从Buffer入到Channel 中。

3.用于将字节流转换为字符流的是:InputStreamReader、OutputStreamWriter2、NIO主要有三大核心部分:Buffer、Channel、Selector5、Java中提供了一个类:RandomAccesseFile,它不但具有读写文件的功能,而且可以随机地从文件的任何位置开始执行读写数据的操作。

二、判断题1. 如果一个File表示目录下有文件或者子目录,调用delete()方法也可以将其删除。

错2.对象序列化是指将一个Java 对象转换成一个I/0 流中字节序列的过程。

对3.Channel 是一个接口对象,它类似于传统的流对象。

对4.InputStream类的close()方法是用于关闭流并且释放流所占的系统资源。

对5,BufferedInputStream 和BufferedOutputStream 不是字节缓冲流。

错三、选择题1.下面选项中,哪些是标准输人输出流?(多选) (AB)A. System.InB.System. OutC.InputStreamD.OutputStream2.File类中以字符串形式返回文件绝对路径的方法是哪一项?(C)A. getParent()B. getNamel)C. getAbsolutePathOD. getPath()3.以下创建RandomAccessFile类实例对象的代码,哪些是正确的?(多选)(AB)A.new RandomAccessFile(new File("D:\\itcast\\dirl\test. java"),”rw”);B.new RandomAccessFile("D:\\itcast\\dirl\test. java","r");C. new RandomAccessFile("D:\\itcast\\dir1\\test.java");D. new RandomAccessFile("D:\\itcast\\dir1\\test.java","wr")4.以下选项中,哪个流中使用了缓冲区技术? (A)A. BufferedOutputStreamB. FileInputStreamC. DataOutputStreamD. FileReader5.以下选项中,关于Java NIO 中Buffer类的常用说法正确的是哪一项?(B)A.clearO方法会清除缓冲区数据,并将position 设置为0.limit 设置为capacity OB.fip()方法先将limit 设置为当前position 位置,然后再将pson设置为0C.mark()方法用于设置Buffer 的标记(mark),其能在0 与limi 之间做标记D.rewind()方法将position 设置为0,并设置mark 标记四、简答题1、简述I/O 流的概念。

第七章 面向对象的Java实现-继承和多态

第七章 面向对象的Java实现-继承和多态

Java教员
.NET教员
10
为什么需要继承 4-4
public class JavaTeacher2 extends Teacher { public JavaTeacher2(String myName, String mySchool) { super(myName, mySchool); 子类自动继承父类的属 } 性和方法,子类中不再 public void giveLesson(){ 存在重复代码 System.out.println("启动 Eclipse"); super.giveLesson(); } } public class DotNetTeacher2 extends Teacher { public DotNetTeacher2(String myName, String mySchool) { super(myName, mySchool); } public void giveLesson(){ System.out.println("启动 Visual Studio .NET"); super.giveLesson(); } } 使用继承,可以有效实现代码复用
4
本章目标
掌握继承 掌握super关键字 掌握多态
5
生活中的继承 2-1
生活中,继承的例子随处可见
动物 谁是父类? 谁是子类? 能说出继承的特点吗?
食草动物
食肉动物
继承需要符合的关系:is-a,父类更通用、子类更具体
6
生活中的继承 2-2
子类具有父类的一般特性(包括属性和行为), 以及自身特殊的特性
可以接收子类类型 public class HQ3 { public void judge(Teacher t){ t.introduction(); t.giveLesson(); 根据实际创建的对象 } 类型调用相应方法 大家好!我是北京中心的李明. 启动 Eclipse 知识点讲解 总结提问

第7章_Java_awt 509修改 - 副本 (2)

第7章_Java_awt 509修改 - 副本 (2)

17
Frame类(框架)
Frame类是Container类的间接子类。当需要一个窗口时, 可使用Frame或其子类创建一个对象。窗口也是一个容器,
可以向窗口添加组件。窗口默认地被系统添加到显示器屏
幕上,因此,不允许将一个窗口添加到另一个容器中。 Frame是顶级窗口,可以显示标题,重置大小。当Frame 被关闭,将产生WindowEvent事件,Frame无法直接监听 键盘输入事件。
文字、图形、图象… 不能像标准组件一样被系统识别和承认,只起装饰作用。 不能响应用户的动作,不具有交互功能。
8
7.2 组件和容器
Java的图形用户界面的最基本组成部分是组件 (Component),组件是一个可以以图形化的方 式显示在屏幕上并能与用户进行交互的对象,例
如一个按钮,一个标签等。
给用户的技术。
目前Java主要提供了两个处理图形用户界面的类库: java.awt和javax.swing。
2
AWT:抽象窗口工具集(Abstract Windows Toolkit), 其外观取决于具体的平台,可用于Java的applet和 application。 java.awt包中包含了一个完整的类集以支持GUI程序的设 计(重量级构件),比如组件、图形等。
7 7
界面元素
容器是用来组织其他界面成分和元素的单元。
可以形成容器的层次,构筑复杂结构 Window(Frame、Applet、Dialog )
组件是图形用户界面的基本单位,它里面不再包含 其他的成分。
GUI组件是图形用户界面标准化的结果。 GUI组件的作用是完成与用户的交互。
用户自定义成分
Canvas Label TextField TextArea Scrollbar

第7章 Java的输入 输出流

第7章   Java的输入 输出流

第7章 Java的输入/输出流
String dirList[]=f1.list(m); for(int i=0;i<dirList.length;i++) Transcript.println(dirList[i]); } } public MyClass3(File f) { this.f=f; } public boolean accept(File dir, String name){ return name.startsWith("un"); } }
第7章 Java的输入/输出流
该程序的运行结果如图7.3所示。 此程序中,我们为了说明路径分隔符的使用方法, 实例化文件对象的时候给出了全路径,其实由于我们 已经在Java系统中设置好了源路径,只要给出文件名 就行了。 表7.1中,list方法用于列出一个目录中所有的文件 或与某个模式相匹配的文件。下面我们给出两个例子 来讨论带参数或不带参数的list方法的使用。
返回指定格式的目录中的文件名 返回当前目录中的所有文件名 创建目录,成功返回真 创建路径中所有目录,成功则返回真 返回路径分隔符 文件更名,成功返回真 返回文件分隔符 返回对象的字符串表示
第7章 Java的输入/输出流
下面我们给出几个File类的应用实例。通过例题的 使用,希望读者对File类有更清楚的认识。 例7.1 import java.io.*; public class MyClass1 { public static void main(String args[]){ Filef=new File("c:\\jbuilder3\\myprojects\\untitled5\\MyClass1.java"); if(!f.exists())

第七章 Collection 集合框架

第七章 Collection       集合框架
第七章 Collection 集合框架
• 掌握集合框架继承结构 • 常见集合类的使用
简介
Java平台提供了一个全新的集合框架。“集合框架”主要由一组用来操 作对象的接口组成。不同接口描述一组不同数据类型。它们都封装在 java.util包中。 图 7.1 Java集合框架图
简介
集合接口: 个接口 短虚线表示),表示不同集合类型,是集合框架的基础。 个接口( ),表示不同集合类型 集合接口:6个接口(短虚线表示),表示不同集合类型,是集合框架的基础。 抽象类:5个抽象类(长虚线表示),对集合接口的部分实现。可扩展为自 抽象类 定 义集合类。 实现类:8个实现类(实线表示),对接口的具体实现。 实现类 集合机构图 * Collection ├List │├LinkedList │├ArrayList │└Vector │ └Stack └Set HashSet , TreeSet , LinkedHashSet Map ├Hashtable ├HashMap └WeakHashMap
Collection转换 转换 为Object数组 数组
Object[] toArray() Object[] toArray(Object[] a)
7.3 List
Collection<--List<--Vector Collection<--List<--ArrayList Collection<--List<--LinkedList
图 7.2 核心接口 Collection 接口是一组允许重复的对象。 接口是一组允许重复的对象。 Set 接口继承 Collection,但不 , 允许重复, 无序的)。 允许重复,使用自己内部的一个排列机制 (无序的)。 List 接口继承 Collection,允许重复,以元素安插的次序来放置元素,不会重 ,允许重复,以元素安插的次序来放置元素, 新排列。 新排列。 Map接口是一组成对的键-值对象,即所持有的是 接口是一组成对的键- 接口是一组成对的键 值对象,即所持有的是key-value pairs。Map中 。 中 不能有重复的key。拥有自己的内部排列机制。 不能有重复的 。拥有自己的内部排列机制。 注意: 注意: Ø 容器中的元素类型都为 容器中的元素类型都为Object。从容器取得元素时,必须把它转换成原来的类 。从容器取得元素时, 型。

Java语言程序设计(郑莉)第七章课后习题答案

Java语言程序设计(郑莉)第七章课后习题答案

Java语言程序设计第七章课后习题答案1.数组的声明与数组元素的创建有什么关系?答:声明数组仅仅是代表试图创建数组,不分配任何存储空间,声明是为创建做“铺垫”。

2.Vector类的对象与数组有什么关系?什么时候适合使用数组,什么时候适合使用Vector?答:vector是一个能够存放任意对象类型的动态数组,容量能自动扩充,而数组存储固定且类型相同的对象;对于存储固定类型相同的对象使用数组,对于存储不同类型或者动态调整数组大小的情况使用Vector。

3.与顺序查找相比,二分查找有什么优势?使用二分查找的条件?答:对于大数据量中进行查找时二分查找比顺序查找效率高得多;条件是已排序的数组。

4.试举出三种常见的排序算法,并简单说明其排序思路。

答:①选择排序:基本思想是站在未排序列中选一个最小元素,作为已排序子序列,然后再重复地从未排序子序列中选取一个最小元素,把它加到已经排序的序列中,作为已排序子序列的最后一个元素,直到把未排序列中的元素处理完为止。

②插入排序:是将待排序的数据按一定的规则逐一插入到已排序序列中的合适位置处,直到将全部数据都插入为止。

③二分查找:将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。

重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。

5.声明一个类People,成员变量有姓名、出生日期、性别、身高、体重等;生成10个People 类对象,并放在一个以为数组中,编写方法按身高进行排序。

//People类public class People{private String name;private String birthdaydate;private String sex;private double height;private double weight;public People(){//默认构造函数}public People(People p){=;this.birthdaydate=p.birthdaydate;this.sex=p.sex;this.height=p.height;this.weight=p.weight;}public People(String name,String birthdaydate,String sex,double height,double weight){=name;this.birthdaydate=birthdaydate;this.sex=sex;this.height=height;this.weight=weight;}public String getName() {return name;}public void setName(String name) { = name;}public String getBirthdaydate() {return birthdaydate;}public void setBirthdaydate(String birthdaydate) {this.birthdaydate = birthdaydate;}public String getSex() {return sex;}public void setSex(String sex) {this.sex = sex;}public double getHeight() {return height;}public void setHeight(double height) {this.height = height;}public double getWeight() {return weight;}public void setWeight(double weight) {this.weight = weight;}public String toString(){return"姓名:"+name+"\n出生年月:"+birthdaydate+"\n性别:"+sex+"\n 身高:"+height+"\n体重:"+weight;}}//test7_5类public class test7_5 {/***@param args*/public static void main(String[] args) {// TODO Auto-generated method stubPeople[] people={new People("林楚金","1989年8月13日","男",182,63.5),new People("诸葛亮","181年7月23日","男",184,76.6),new People("迈克杰克逊","1958年8月29日","男",180,60),new People("乔丹","1963年2月17日","男",198,98.1),new People("拿破仑","1769年8月15日","男",159.5,63),new People("苍井空","1983年11月11日","女",155,45),};People temp=new People();for(int i=0;i<people.length-1;i++)for(int j=i+1;j<people.length;j++){if(people[i].getHeight()<people[j].getHeight()){temp=people[j];people[j]=people[i];people[i]=temp;}}System.out.println("按身高从小到大排序后的结果如下:");for(int i=0;i<people.length;i++)System.out.println(people[i]+"\n");}}运行结果:6.声明一个类,此类使用私有的ArrayList来存储对象。

lesson07-02 Java包和导入和类路径 - Jar导出和导入

lesson07-02 Java包和导入和类路径 - Jar导出和导入

Java 核心技术第七章package, import和classpath第二节jar文件导出和导入1•jar文件,一种扩展名为jar的文件,是Java所特有的一种文件格式,用于可执行程序文件的传播。

•jar文件实际上是一组class文件的压缩包•jar文件优势–jar文件可以包括多个class,比多层目录更加简洁实用–jar文件经过压缩,只有一个文件,在网络下载和传播方面,更具有优势–jar文件只包括class,而没有包含java文件,在保护源文件知识版权方面,能够可以起到更好的作用–将多个class文件压缩成jar文件(只有一个文件),可以规定给一个版本号,更容易进行版本控制•利用Eclipse的Export功能导出jar文件–选中项目,点击顶部菜单File->Export,选中Java>Jar File, 然后点击Next•以上过程导出MOOC07-01.jar文件,可以将文件分发给(其他机器上)其他项目以供调用。

•新建MOOC07-02项目,导入MOOC07-01.jar,调用其中的.ecnu.PackageExample•导入:选中MOOC07-02项目,右键选Properties。

左侧菜单栏选中Java Build Path, 在右侧标签栏选中Libraries。

点击Add External JARs, 选中前面导出的MOOC07-01.jar ,点击Apply and Close按钮,即完成添加过程。

•导出jar也可以使用JDK自带的jar.exe。

jar.exe位于JAVA_HOME的bin目录下。

•jar导出的主要命令有:–jar cvf classes.jar A.class B.class //将A和B压缩集成为classes.jar–jar cvf classes.jar –C foo/ . //将foo下面的所有文件压缩为classes.jar•详细命令在控制台下输入jar后可以查看。

Java语言程序设计7-1-java第7章(文件数据流)

Java语言程序设计7-1-java第7章(文件数据流)
例题的执行结果
在屏幕上显示文字时需要注意的事项: 在屏幕上显示文字时需要注意的事项: FileReader.read()函数返回整型数,显示时必 函数返回整型数, 函数返回整型数 须把它强制转换成字符类型 如果不转换,显示结果如下: 如果不转换,显示结果如下:
软件学院
7.1 写入和读出数据文件
二进制数据文件的读写
DataInputStream in1 = new DataInputStream(file1); DataOutputStream out1 = new DataOutputStream(file2);
软件学院
7.1 写入和读出数据文件
3.用DataInputStream类读出数据 用 类读出数据
FileInputStream file1 = new FileInputStream("save1.dat"); FileOutputStream file2 = new FileOutputStream("save2.dat");
软件学院
7.1 写入和读出数据文件
2.创建文件读写对象 创建文件读写对象
while (aChar != '\u0000') { str.append(aChar); aChar = in1.readChar(); }
软件学院
7.1 写入和读出数据文件
5.关闭文件 关闭文件
在读取或写入文件之后, 在读取或写入文件之后,同样应当调用文件读写对 象的close函数关闭文件 象的 函数关闭文件 在写入文件时,内容往往只写在缓存里, 在写入文件时,内容往往只写在缓存里,只有在关 闭文件时才会真正将内容写入 关闭文件的代码如下: 关闭文件的代码如下:

04747 java知识点总结

04747 java知识点总结

第七章:输入和输出流第一节:数据流的基本概念1.在java中,把不同类型的输入、输出源抽象为流,其中输入或输出的数据成为数据流,用统一的接口表示。

2.数据流是指一组有顺序的、有起点和终点的字节集合。

程序从键盘接收数据或向文件中写数据,都可以使用数据流来完成。

3.流分为输入数据流和输出数据流。

输入数据流只能读不能写;而输出数据流只能写不能读。

从数据流中读取数据是,必须有一个数据源与该数据流相连(FileInput Stream in = new FileInputStream(“javatest.txt”);)(实例化)4.Java.io包中提供了表示数据流的4个基本抽象类(不可以实例化),分别是InputStream、OutputStream、Reader和Writer。

因此涉及数据流操作的程序中,几乎都要使用引入语句:import java.io.*5.为了使对象的状态能够方便地永久保存下来,java.io包中又提供了以字节流为基础的用于对象的永久化保存状态的机制,通过实现ObjectInput和Object Output接口来完成。

6.输入数据流提供的主要操作方法有:(得到-1,标志数据流结束)int read():从输入流读取一个字节的二进制数据int read( byte [ ] b):将多个字节读到数组中,填满整个数组int read( byte [ ] b ,int off , int len): 从输入流中读取长度为len的数据,从数组b中下标为off的位置开始放置读入的数据,读毕返回读取的字节数。

7.void close(): 关闭数据流int available(): 返回目前可以从数据流中读取的字节数long skip(long l): 跳过数据流中指定数量的字节不读取,返回值表示实际跳过的字节数8.如需要反向读取数据流,则使用回推操作(Push Back)Boolean markSupported(): 用于测试数据流是否支持回推操作void mark(int): 用于标记数据流的当前位置,并划出一个缓冲区,其大小至少为指定参数的大小。

Java程序设计教程第7章7.2 多 态

Java程序设计教程第7章7.2 多 态
mas参ter数.fe都ed是(pPenegt类uin的);子类
master.feed(xxx); ……
public void feed( XXX xxx ) { xxx.eat();
可否使用一个feed(Pet pet) 实现对所有宠物的喂食?
}
… … 频繁修改代码,代码可扩展性、可维护性差,
}
如何优化?
课堂操作——购置新车2-2
提前做完的同学可以尝试改进系统:
1. 循环从控制台选择汽车种类 2. 从控制台输入天数 3. 累加计算总租金
20/30
多态
总结
使用多态的好处
减少类中代码量 提高代码的可扩展性和可维护性
向上转型——子类转换为父类,自动进行类型转换
向下转型——父类转换为子类,结合instanceof运算符进行强 制类型转换
编写测试方法
调用主人类给狗狗喂的方法 调用主人类给企鹅喂的方法
为什么使用多态5-2
3/30
为什么使用多态5-3
问题
如果再领养XXX宠物,并需要给XXX喂食,怎么办?
添加XXX类,继承Pet类,实现吃食方法 修改Master类,添加给XXX喂食的方法
4/30
为什么使用多态5-4
主人类
练习
需求说明
使用多态实现喂养宠物功能 增加宠物猫并喂食,其健康值增加4
9/30
使用父类作为方法返回值实现多态
使用多态实现领养宠物
使用父类作为方法返回值 实现思路
在Master类添加领养方法getPet(String typeId ) 创建测试类,根据主人选择宠物类型编号来领养宠物
public class Master { public void feed( Dog dog ) { dog.eat(); } public void feed( Penguin pgn ) { pgn.eat(); }

java语言程序设计(基础篇) 第七章

java语言程序设计(基础篇) 第七章
3
7.2. 为对象定义类
例如一个圆对象(circle),有数据域圆半径( radius)(标识了圆的属性),圆的行为就是 其面积可以通过方法getArea计算而得。同类型 的对象使用一个公共的类来定义。类就是定义 对象的数据和方法的模板.。一个对象是类的实 例(instance)。你可以生成一个类的很多个实 例,产生一个实例也叫做实例化(instantiation
To distinguish between object reference variables and primitive data type variables (§7.4).
To use classes in the Java library (§7.5).
To declare private data fields with appropriate get and set methods to make class easy to maintain (§7.6-7.8).
第7章 对象和类
在前一部分(2到6章),我们学习了编程基础,学会 使用基本数据类型、控制语句、方法以及数组 ,这些都是所有的面向过程的语言都具有的特 征,但, Java,是个面向对象的语言,不但具有 面向过程语言的要素,也具有抽象、封装、继 承、多态等特征以实现强大的灵活性、模块化 、以及可重用性以开发软件,在这一部分,我 们将学习如何定义、扩展以及使用类与对象
).术语对象、实例通常可互用,类和对象的关
系类似于书版和从书版印刷出很多的书。 下面是个圆的例子。
4
对象
类名: Circle
数据域: radius is _______
方法: getArea
一个类模板
圆对象 1
数据域: radius is 10

java各章练习题

java各章练习题

java各章练习题Java是一种跨平台的面向对象编程语言,具有简洁、高效和可靠性的特点,因此受到广泛应用。

为了更好地掌握Java编程的技巧和知识,经常进行练习是非常必要的。

本文将为大家整理各章练习题,帮助大家深入学习和理解Java。

第一章绪论1. 请简要介绍Java编程语言的起源和发展。

2. Java和C++有哪些相似之处和不同之处?第二章 Java语言基础1. 请编写一个Java程序,在屏幕上输出“Hello, World!”。

2. 请解释Java中的基本数据类型有哪些,并给出各个数据类型的范围。

第三章控制语句1. 请编写一个Java程序,使用if-else语句判断一个数是奇数还是偶数。

2. 请编写一个Java程序,使用for循环计算1到100之间所有奇数的和。

第四章数组1. 请编写一个Java程序,创建一个包含5个元素的整型数组,并输出数组中的所有元素。

2. 请编写一个Java程序,交换一个整型数组中的最大值和最小值,并输出交换后的数组。

第五章面向对象编程1. 请编写一个Java类,表示一个学生,包含学生的姓名、年龄和成绩等属性。

2. 请编写一个Java程序,创建一个学生对象,并调用其成绩计算方法,输出学生的总成绩。

第六章异常处理1. 请编写一个Java程序,读取一个整数,并使用try-catch语句处理可能出现的输入异常。

2. 请解释Java中的异常处理机制,并列举几种常见的异常。

第七章文件输入输出1. 请编写一个Java程序,通过文件输入输出,实现对一个文本文件的复制。

2. 请解释Java中的字节流和字符流的区别,并说明它们的应用场景。

第八章多线程编程1. 请编写一个Java程序,创建两个线程,分别输出1到50和51到100之间的所有数字。

2. 请解释Java中的线程同步机制,并给出使用synchronized关键字的示例。

第九章网络编程1. 请编写一个Java程序,使用Socket套接字实现简单的客户端和服务端通信。

java课件 第七章 数组

java课件 第七章 数组
13
7.3 数组访问
数组是一种数据结构,它由一组数组元素组 成。 数组是一种对象,它也有自己的成员变量和 方法。 数组一旦创建,就可以通过数组对象的引用 访问数组中的每一个元素,或者访问数组的 成员变量和方法。
14
7.3.1 对数组元素的访问
访问数组元素可以使用以下表达式: <数组对象引用>[<下标>] 数组访问表达式的类型是数组元素的类型,值是对 应数组元素的值。数组访问表达式的计算结果是变 量,可以出现在赋值操作符的左边。 <下标>是一个表达式,其类型可以是byte、char、 short或int型,但最终都会自动单目算术提升为int 型。<下标>的类型不能是long型。 <下标>的取值从0开始,一直到数组的长度减1。如 果<下标>值超出了允许的取值范围,将引发运行时 例外ArrayIndexOutOfBoundsException。
18
7.4 二维数组
在Java语言中,所谓二维数组是指数组的嵌套,即 数组的数组。 一个数组的数组元素类型既可以是基本类型,也可 以是引用类型。其中,引用类型就包括数组类型。 当一个数组的数组元素类型本身是数组类型时,就 形成了二维数组,甚至三维数组、四维数组等。 int[][] 表示一个int型的二维数组。其中: 第1个方括号可 以理解为第一维(外层)数组,其元素类型为int[] 型;第2个方括号可以理解为第二维(被嵌套的内 层)数组,其元素类型为int型。
4
7.1.2 数组变量
数组对象也需要通过变量来引用和操纵,这种变量 称为数组变量。 数组变量是指那些类型为数组类型的变量。 数组变量是引用型变量,其中存储着指向某个数组 对象的一个引用值。定义数组变量的例子:

数据结构(Java语言描述)第七章 查找

数据结构(Java语言描述)第七章  查找
数据结构
第七章 查找
目录
1 查找
2 静态查找表
第七章 查找
动态查找表 哈希表 小结
总体要求
•掌握顺序查找、折半查找的实现方法; •掌握动态查找表(包括:二叉排序树、二叉平衡树 、B-树)的构造和查找方法; •掌握哈希表、哈希函数冲突的基本概念和解决冲突 的方法。
7.1基本概念
1、数据项 数据项是具有独立含义的标识单位,是数据不可分 割的最小单位。 2、数据元素 数据元素数是据由项若(名干) 数据项构成的数据单位,是在某
}
性能分析:i 0 1 2 3 4
5 13 19 21 37
Ci 3 4 2 3 4
查找成功:
比较次数 = 路径上的结点数
比较次数 = 结点 4 的层数
比较次数
2
56 7 56 64 75 1 34
判定树
5
8 9 10 80 88 92 2 34
查找37 8
树的深度
0
3
6
9
≤=
log2n +1
1
4
}
【算法7-1】初始化顺序表 public SeqTable(T[] data,int n){
elem=new ArrayList<ElemType<T>>(); ElemType<T> e; for(int i=0;i<n;i++){
e=new ElemType<T>(data[i]); elem.add(i, e); } length=n; }
前者叫作最大查找长度(Maximun Search Length),即 MSL。后者叫作平均查找长度(Average Search Length) ,即ASL。

Java程序设计教程 第7章-Java GUI编程技术

Java程序设计教程 第7章-Java GUI编程技术
Java程序设计
7.2.1 java.awt简介
7.2 java.awt编程技术
Java程序设计
7.2 java.awt编程技术
7.2.2 Component类
❖Component类是java.awt包中最核心、最基本的类。Component类是构成Java图形用 户界面的基础,大部分组件都是由该类派生出来的。Component类是一个抽象类,其 中定义了组件所具有的一般功能,可在屏幕上显示,并可与用户进行交互,其子类如 按钮、文本框等。 ❖Component类定义的方法如下: ❖基本的绘画支持:paint(), repaint(), update()等; ❖字体和颜色等外形控制:setFont(), SetForeground()等; ❖大小和位置控制:SetSize(), SetLocation()等; ❖图像处理:实现接口ImageObserver; ❖组件状态控制(SetEnable, isEnable, isVisible, isValid等。
Java程序设计
7.2 java.awt编程技术
7.2.1 java.awt简介
❖java.awt包提供很多类和接口,包括: ❖基本组件(Component):构成GUI界面的基本元素,具有坐标位置、尺寸、字体、颜 色等属性,能获得焦点、可被操作、可响应事件等。 ❖容器类组件(Container):用来盛放组件的组件等。 ❖2D图形绘制组件(Graphics):提供在组件上绘制图形的方法。 ❖布局管理器(LayoutManager):用来安排容器中组件的位置和大小。 ❖事件处理模型:用来响应图形界面组件所触发的事件。
Java程序设计
7.1 GUI编程的Java实现
7.1.2 swing

第7章__例外处理

第7章__例外处理
用于抛出一个例外 用于声明方法可能抛出的例外类型

throw e;


throws Etype1, Etype2 ……

1、例外的概念
程序中的例外不外乎两种情况:一种是运行环境不能 满足程序运行的要求而出错;一种是程序要解决的问 题的约束而导致的。 不管是哪种情况,编写程序时,程序员要考虑到程序 运行时可能遇到的各种情况(条件),并进行处理; 如果不能处理,或者不知该如何处理,就可以认为是 一种错误,这时,就需要交给别人去处理。 以前,是通过返回错误代码来提示别人程序有错误; 在Java中,则是通过例外机制通知别人出错信息。
1、例外的概念
{
用例外的形式处理错误:
try { openTheFile; determine its size; allocate that much memory; read-File; closeTheFile; } catch(fileopenFailed) catch(sizeDetermineFailed) catch(memoryAllocateFailed) catch(readFailed) catch(fileCloseFailed) finally

Exception:一般程序中可预知的问题,其产生的例外 可能会带来意想不到的结果,因此Java编译器要求Java 程序必须捕获或声明所有的非运行时异常。

2、例外的分类
用户自己产生的例外
Throwable
Exception
处理
Error
不做处理 由用户捕获或 声明并处理 RuntimeException

AWTError (in java.awt) …
2、例外的分类

Java语言程序设计(基础篇)原书第十一版 梁勇 第7、8章 课后题答案

Java语言程序设计(基础篇)原书第十一版 梁勇 第7、8章 课后题答案

7.7统计个位数的数目public class DemoA {public static void main(String[] args) {int num[]=new int[100];int counts[]=new int[10];for (int i=0,n=0;i<100;i++){num [i]=(int)(Math.random()*9);counts[num[i]]++;System.out.print(num[i]+"\t");n++;if (n%10==0){System.out.println();}}System.out.println();for (int j=0;j<10;j++){System.out.print(j+"出现了"+counts[j]+"次\t");}}7.27相同的数组public class List {public static void main(String[] args) {int[] list1= new int[5];int[] list2= new int[5];Scanner in=new Scanner(System.in);System.out.println("请输入第一个数组(5位):");for (int i=0;i<5;i++) { list1[i] = in.nextInt(); }System.out.println("请输入第二个数组(5位):");for (int i=0;i<5;i++){ list2 [i]=in.nextInt(); }equals(list1,list2);}public static boolean equals(int[] list1,int[] list2){Arrays.sort(list1);Arrays.sort(list2);if (Arrays.equals(list1,list2)){ System.out.println("两数组相同"); }else System.out.print("两数组不相同");return false;}}8.1求矩阵中各列数字的和public class SumColumn {public static void main(String[]args){int columnIndex = 0;Scanner input = new Scanner(System.in);System.out.println("请输入一个3×4的数组:");double[][]m=new double[3][4];for(int i=0;i<m.length;i++)for(int j=0;j<m[i].length;j++)m[i][j]=input.nextDouble();sumColumn(m,columnIndex);}public static double sumColumn(double[][]m,int columnIndex ){for( ;columnIndex<m[0].length;columnIndex++ ){double total=0;for(int row=0;row<m.length;row++){total+=m[row][columnIndex];}System.out.println("第" + (columnIndex+1)+ "列的和是"+total);}return 0;}}8.2求矩阵主对角线上的和public class Text {public static void main(String[]args){int columnIndex = 0;Scanner input = new Scanner(System.in);System.out.println("请输入一个4×4的数组:");double[][]m=new double[4][4];for(int i=0;i<m.length;i++)for(int j=0;j<m[i].length;j++)m[i][j]=input.nextDouble();sumColumn(m,columnIndex);}public static double sumColumn(double[][]m,int columnIndex ){ double sum1=0;double sum2=0;for( ;columnIndex<m[0].length;columnIndex++ ){sum1+=m[columnIndex][columnIndex];}for(int i=0,j=3 ;i>4;i++,j-- ){sum2+=m[i][j];}System.out.println("矩阵主对角线之和为:"+(sum1+sum2));return 0;}}。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

数据结构课程的内容多对多(m:n)第7章图7.1 基本术语7.2 存储结构7.3 图的遍历7.4 图的其他运算7.5 图的应用7.1 图的基本术语图:记为G =( V , E )其中:V 是G 的顶点集合,是有穷非空集;E 是G 的边集合,是有穷集。

问:当E(G)为空时,图G 存在否?答:还存在!但此时图G 只有顶点而没有边。

有向图:无向图:完全图:图G 中的每条边都是有方向的;图G 中的每条边都是无方向的;图G 任意两个顶点都有一条边相连接; 若n 个顶点的无向图有n (n -1)/2 条边,称为无向完全图 若n 个顶点的有向图有n(n-1) 条边, 称为有向完全图V=vertexE=edge证明:①完全无向图有n(n-1)/2 条边。

证明:若是完全无向图,则顶点1必与所有其他顶点各有1条连线,即有n-1条边,顶点2有n-2条边,…,顶点n-1有1条边,顶点n有0条边.总边数=n-1+n-2+…+1+0=(n-1+0)n/2= n(n-1)/2②完全有向图有n(n-1)条边。

证明:若是完全有向图,则顶点1必必与所有其他顶点各有2条连线,即有2(n-1)条边,顶点2有2(n-2)条边,…,顶点n-1有2条边,顶点n有0条边.总边数=2( n-1+n-2+…+1+0)=2(n-1+0)n/2= n(n-1)例:判断下列4种图形各属什么类型?无向无向图(树)有向图有向n (n -1)/2 条边n (n -1) 条边G1的顶点集合为V(G1)={0,1,2,3}边集合为E(G1)={(0,1),(0,2),(0,3),(1,2),(1,3),(2,3)}完全图完全图稀疏图:稠密图:设有两个图G=(V, E) 和G’=(V’, E’)。

若V’ ⊆V 且E’ ⊆E, 则称图G’ 是图G的子图。

子图:边较少的图。

通常边数<<n2边很多的图。

无向图中,边数接近n(n-1)/2 ;有向图中,边数接近n(n-1)带权图:即边上带权的图。

其中权是指每条边可以标上具有某种含义的数值(即与边相关的数)。

连通图:在无向图中, 若从顶点v 1到顶点v 2有路径, 则称顶点v 1与v 2是连通的。

如果图中任意一对顶点都是连通的, 则称此图是连通图。

非连通图的极大连通子图叫做连通分量。

=带权图在有向图中,若对于每一对顶点v i 和v j , 都存在一条从v i 到v j 和从v j 到v i 的路径, 则称此图是强连通图。

非强连通图的极大强连通子图叫做强连通分量。

强连通图:网络:有两类图形不在本章讨论之列:邻接点:有向边(u , v )称为弧,边的始点u 叫弧尾,终点v 叫弧头顶点v 的度是与它相关联的边的条数。

记作TD(v)。

在有向图中, 顶点的度等于该顶点的入度与出度之和。

顶点v 的入度是以v 为终点的有向边的条数, 记作ID(v);顶点v 的出度是以v 为始点的有向边的条数, 记作OD(v)。

若(u , v ) 是E (G) 中的一条边,则称u 与v 互为邻接顶点弧头和尾:度、入度和出度:是一个极小连通子图,它含有图中全部顶点,但只有n -1条边。

如果在生成树上添加1条边,必定构成一个环。

若图中有n 个顶点,却少于n -1条边,必为非连通图。

生成森林:问:当有向图中仅1个顶点的入度为0,其余顶点的入度均为1,此时是何形状?由若干棵生成树组成,含全部顶点,但构成这些树的边是最少的。

答:是树!而且是一棵有向树!简单路径:路径上各顶点v1,v2,...,vm均不互相重复。

回路:例:若路径上第一个顶点v1与最后一个顶点vm重合,则称这样的路径为回路或环。

路径:在图G=(V, E) 中, 若从顶点vi 出发, 沿一些边经过一些顶点vp1, vp2, …, vpm,到达顶点vj。

则称顶点序列( vivp1 vp2 ... vpm vj ) 为从顶点vi 到顶点vj 的路径。

它经过的边(vi, vp1)、(vp1, vp2)、...、(vpm, vj)应当是属于E的边。

路径长度:非带权图的路径长度是指此路径上边的条数;带权图的路径长度是指路径上各边的权之和。

ADT Graph {数据对象V :v 是具有相同特性的数据元素的集合,称为顶点集。

数据关系R :R={VR};VR={<v,w>|v,w∈V 且P(v,w),<v,w>表示从v 到w 的弧,谓词P(v,w)定义了弧<v,w>的意义或信息}基本操作P :CreatGraph (&G, V ,VR);初始条件:V 是图的顶点集,VR 是图中弧的集合。

操作结果:按V 和VR 的定义构造图G 。

InsertVex (&G, v );初始条件:图G 存在,v 和图中顶点有相同特征。

操作结果:在图G 中添加新顶点。

………………(参见P156-257)图的抽象数据类型注意:V的大小写含义不同!7.2 图的存储结构图的特点:非线性结构(m :n )•邻接表•邻接多重表•十字链表设计为邻接矩阵链式存储结构:顺序存储结构:无!(多个顶点,无序可言)但可用数组描述元素间关系。

可用多重链表重点介绍:邻接矩阵(数组)表示法邻接表(链式)表示法一、邻接矩阵(数组)表示法⎩⎨⎧∈∈=,),( , ,]][[ .否则或者如果0><1A E j i E j i j i Edge 建立一个顶点表(记录各个顶点信息)和一个邻接矩阵(表示各个顶点之间关系)。

设图A = (V , E ) 有n 个顶点,则图的邻接矩阵是一个二维数组A.Edge[n][n],定义为:v1v2v3v5v4A例1:邻接矩阵:A.Edge =(v1 v2v3 v4 v5)v1v2v3v4v50 00 00 00 0 00 0 0 00 0 0 0 00 0 0 0 0分析1:无向图的邻接矩阵是对称的;分析2:顶点i 的度=第i 行(列) 中1 的个数;特别:完全图的邻接矩阵中,对角元素为0,其余全1。

0 1 1 1 10101010 1010 1 11 0 10 10 1 110顶点表:例2 :有向图的邻接矩阵分析1:有向图的邻接矩阵可能是不对称的。

分析2:顶点的出度=第i 行元素之和,OD( Vi )=∑A.Edge[ i ][j ]顶点的入度=第i 列元素之和。

ID( Vi )=∑A.Edge[ j ][i ]顶点的度=第i 行元素之和+第i 列元素之和,即:TD(Vi)=OD( Vi ) + ID( Vi )v1v2v3v4A邻接矩阵:A.Edge =(v1 v2v3 v4)v1v2v3v4注:在有向图的邻接矩阵中,第i 行含义:以结点v i 为尾的弧(即出度边);第i 列含义:以结点v i 为头的弧(即入度边)。

顶点表:0 1100 00 0 000 110 0 0容易实现图的操作,如:求某顶点的度、判断顶点之间是否有边(弧)、找顶点的邻接点等等。

n 个顶点需要n*n 个单元存储边(弧);空间效率为O(n 2)。

对稀疏图而言尤其浪费空间。

特别讨论:网(即有权图)的邻接矩阵定义为:A.Edge [ i ][ j ]=W ij <vi, vj> 或(vi, vj )∈VR ∞ 无边(弧)v1v2v3v4Nv5v65489755613以有向网为例:邻接矩阵:∞∞∞ ∞∞∞∞∞∞ ∞∞∞∞∞∞ ∞∞∞∞∞∞ ∞∞∞∞∞∞ ∞∞∞∞∞∞ ∞∞∞N .Edge =( v1 v2v3 v4 v5 v6 )邻接矩阵法优点:邻接矩阵法缺点:顶点表:5∞ 7∞4∞∞∞8∞∞∞ ∞95 ∞∞6∞ 5∞∞3∞∞ ∞1∞注:用两个数组分别存储顶点表和邻接矩阵#define INFINITY INT_MAX //最大值∞#define MAX_VERTEX_NUM 20 //假设的最大顶点数Typedef enum {DG, DN, AG,AN } GraphKind;//有向/无向图,有向/无向网Typedef struct ArcCell { //弧(边)结点的定义VRType adj; //顶点间关系,无权图取1或0;有权图取权值类型InfoType *info; //该弧相关信息的指针}ArcCell , AdjMatrix [ MAX_VERTEX_NUM ] [MAX_VERTEX_NUM ];Typedef struct{ //图的定义VertexType vexs [MAX_VERTEX_NUM ] ; //顶点表,用一维向量即可AdjMatrix arcs; //邻接矩阵Int Vernum, arcnum; //顶点总数,弧(边)总数GraphKind kind; //图的种类标志}Mgraph;图的邻接矩阵存储表示(参见教材P161)对于n 个顶点的图或网,空间效率=O(n 2)Status CreateUDN (Mgraph &G){ //无向网的构造,用邻接矩阵表示scanf(&G.vexnum, &G.arcnum, &IncInfo); //输入总顶点数,总弧数和信息for(i=0;i<G.vexnum;++i) scanf(&G.vexs[i] );//输入顶点值,存入一维向量中for(i=0; i<G.vexnum; ++i) //对邻接矩阵n*n 个单元初始化,adj=∞,info=NULL for(j=0;j<G.vexnum;++j) G.arcs[i][j]={INFINITY, NULL};for(k=0;k<G.arcnum;++k){//给邻接矩阵有关单元赋初值(循环次数=弧数scanf(&v1, &v2, &w);//输入弧的两顶点以及对应权值i=LocateVex(G,v1); j=LocateVex(G,v2);//找到两顶点在矩阵中的位臵(n 次?G.arcs[i][j].adj=w;//输入对应权值If(IncInfo) Input(*G.arcs[i][j].info);//如果弧有信息则填入G.arcs[i][j] = G.arcs [j] [i];//无向网是对称矩阵}return OK;} // CreateUDN 例:用邻接矩阵生成无向网的算法(参见教材P162)对于n 个顶点e 条弧的网,建网时间效率= O(n 2+n+e*n)二、邻接表(链式)表示法对每个顶点v i 建立一个单链表,把与v i 有关联的边的信息(即度或出度边)链接起来,表中每个结点都设为3个域; 每个单链表还应当附设一个头结点(设为2个域),存v i 信息;adjvex nextarcinfodatafirstarc表结点头结点邻接点域,表示v i 一个邻接点的位臵链域,指向vi 下一个边或弧的结点数据域,与边有关信息(如权值)数据域,存储顶点v i 信息链域,指向单链表的第一个结点每个单链表的头结点另外用顺序存储结构存储。

相关文档
最新文档