山东大学项目实训树莓派提升计划二期(十)异常处理、I/O与JavaFX

目录

实验五 异常处理、I/O与JavaFX

实验目的

实验内容

实验设计的思路与考量

异常类型

捕获异常

I/O的考察

HashMap的使用

JavaFX

实验结果示例


实验五 异常处理、I/O与JavaFX

实验目的

掌握异常处理的语句、异常的几种类型和解决方法

掌握建立、读取文件的方法

熟悉File类、字节流、字符流的使用

熟悉JavaFX的基本应用

实验内容

读取项目文件夹下Gettysburg.txt的内容,并统计单词个数,使用JAVAFX进行单词词频的体现。具体要求如下:

  1. IOprocessing类继承Application类。
  2. readfile(String filename)方法实现文件内容的读取。
  3.  count()方法实现单词的计数。
  4. start(Stage primaryStage)方法中调用count()方法,并实现条形图的词汇频率统计表,横坐标为单词,纵坐标为单词出现的次数。

代码框架如下:

public class IOprocessing  extends Application{

    public static String readfile(String filename){

    }

    public static HashMap<String,Integer> count(){

    }

    @Override

    public void start(Stage primaryStage) throws Exception {

    }

    public static void main(String[] args) {    }

}

实验设计的思路与考量

异常类型

异常是对象,而对象都采用类来定义。异常的根类是java.lang.Throwable。在编写程序时,如idea、Eclipse等编程软件会自动识别会异常的类型,并主动抛出,但是自己编写代码的时候还是需要知道异常的类型。我们常见的异常类型如下所示:

捕获异常

当抛出异常时,可以在try-catch块中捕获和处理它。如下所示:

        try {

        } catch (FileNotFoundException e) {

            e.printStackTrace();

        } catch (IOException e) {

            e.printStackTrace();

        }finally{}

需要注意的是:

  1. 从一个通用的父类可以派生出各种异常类。如果一个catch块可以捕获一个父类的异常对象,它就能捕获那个父类的所有子类的异常对象。
  2. 在catch块中异常被指定的顺序是非常重要的。如果父类的catch块出现在子类的catch块之前,就会导致编译错误。如RuntimeException写在Exception之后。

I/O的考察

实验中考察的是从txt文件中读取数据并转换成字符串,这是最基本的I/O知识。需要熟悉File类;Stream流(字节流)中使用FileInputStream、FileOutputStream类;Stream流(字符流)中FileWriter、FileReader、BufferedWriter、BufferedReader类等的使用。在使用时常会抛出FileNotFoundException、IOException等异常,需要合理使用try-catch语句。

在读取成字符串之后,需要考虑的是如何将整段话转换成为单词的问题。首先是要剔除无效字符,使用空格代替所有除英文字符之外的符号,使得每个单词之间用空格分开,便于后续进行操作。其次是调用split()方法,分割字符串,得到所有单词的词组。

HashMap的使用

在进行词频统计时,我们可以使用最基本的数组(但是因为数组定长,我们并不知道单词有多少),也可以使用之前学习过的ArrayList(但是需要两个list,一个保存单词一个保存数字,并且每加入一个单词需要遍历ArrayList一次,因此介绍HashMap的使用,他存储的是键值对,并且可以通过get方法得到value值并进行修改。在第二次碰到同样的单词时,可以使用put方法,即可覆盖之前的同一个key的信息。

在本个实验中,建议使用一种高度精简的put的方式:

hashMap.put(arrayStrings[i],hashMap.getOrDefault(arrayStrings[i],0)+1);

①getOrDefault()方法查找当前hashmap中是否存在该键值key,如果存在返回value,如果不存在返回0。

②将getOrDefault()的值加一并作为该键值key加入hashmap的value,实现了在一条语句内处理新单词加入hashmap、旧单词数量+1的方法。

JavaFX

在学习book1的过程中,每一章节的最后一个部分我们都会学习到JAVAFX的部分知识。因此借着这次实验,我们对JAVAFX进行一个简单的应用实现。

需要注意的是:

  1. 编写JavaFX程序,需要在主类继承javafx.application.Application。
  2. 需要重写定义在javafx.application.Application类中的静态方法start方法。当一个JavaFX应用启动时,JVM使用它的无参构造方法来创建类的一个示例,同时调用其start方法。Start方法一般用于将UI组件放入一个场景,并且在舞台中显示该场景。
  3. 如果使用的是public static void main(String[] args)方法进行启动,需要在其中写Application.launch(args);进行JavaFX的调用。因为launch方法是一个定义在Application类中的静态方法,用于启动一个独立的JavaFX应用。但是如果是从命令行运行程序,main方法不是必须的。

实验结果示例

本个实验是一个自主性较强的实现,实验体现结果的i形式可以与上图不同。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值