第2关:捕获异常


任务描述

本关任务:捕获程序的异常,输出异常处理的结果。

相关知识

为了完成本关任务,你需要掌握:1.如何捕获异常。

捕获异常

通过第一关我们知道,有一部分异常是需要程序员提前处理的,这种异常统一称为检测性异常,如果我们不处理,程序是不能编译通过的,在IDE中也会出现一条红线。

这个时候我们就必须处理这段可能出现异常的程序。

如何处理呢?

Java中提供了一个捕获异常的机制:try-catch

通过这两个单词的字面意思我们就能很好的理解了:try:尝试,catch:捕获; 尝试执行代码A代码B如果这两段代码有一个出现了异常,就会执行catch中的语句,如果代码A、B都不存在异常就不会执行catch代码,最后继续执行代码C

所以之前报错的代码我们这样写就没错啦:

在这里我们可以发现catch捕获的是FileNotFoundException,这是一个文件未找到异常,所以我们在捕获异常的时候最好要先明确异常的种类是什么。

好奇的同学可能会有疑惑,检测性异常可以用try-catch来处理,那运行时异常可不可以用try-catch来处理呢?

可不可以呢?自己验证一下吧!

编程要求

请仔细阅读右侧代码,根据方法内的提示,在Begin - End区域内进行代码补充,具体任务如下:

  • 编辑器中的代码运行时可能会有异常,请利用本关知识处理该异常。

测试说明

补充完代码后,点击测评,平台会对你编写的代码进行测试,当你的结果与预期输出一致时,即为通过。

输入: 4 2

输出: 2

输入: 4 0

输出: 除数不能为0

提示:捕获异常需要用特定的类,下表总结了常用的异常类:

非检测型异常:

异常描述
ArithmeticException当出现异常的运算条件时,抛出此异常。例如,一个整数"除以零"时,抛出此类的一个实例。
ArrayIndexOutOfBoundsException用非法索引访问数组时抛出的异常。如果索引为负或大于等于数组大小,则该索引为非法索引。
ClassCastException当试图将对象强制转换为不是实例的子类时,抛出该异常。
IllegalArgumentException抛出的异常表明向方法传递了一个不合法或不正确的参数。
IllegalMonitorStateException抛出的异常表明某一线程已经试图等待对象的监视器,或者试图通知其他正在等待对象的监视器而本身没有指定监视器的线程。
IllegalStateException在非法或不适当的时间调用方法时产生的信号。换句话说,即 Java 环境或 Java 应用程序没有处于请求操作所要求的适当状态下。
IllegalThreadStateException线程没有处于请求操作所要求的适当状态时抛出的异常。
IndexOutOfBoundsException指示某排序索引(例如对数组、字符串或向量的排序)超出范围时抛出。
NegativeArraySizeException如果应用程序试图创建大小为负的数组,则抛出该异常。
NullPointerException当应用程序试图在需要对象的地方使用 null 时,抛出该异常
NumberFormatException当应用程序试图将字符串转换成一种数值类型,但该字符串不能转换为适当格式时,抛出该异常。
StringIndexOutOfBoundsException此异常由 String 方法抛出,指示索引或者为负,或者超出字符串的大小。
......

检测性异常:

异常描述
ClassNotFoundException应用程序试图加载类时,找不到相应的类,抛出该异常。
CloneNotSupportedException当调用 Object 类中的 clone 方法克隆对象,但该对象的类无法实现 Cloneable 接口时,抛出该异常。
IllegalAccessException拒绝访问一个类的时候,抛出该异常。
InstantiationException当试图使用 Class 类中的 newInstance 方法创建一个类的实例,而指定的类对象因为是一个接口或是一个抽象类而无法实例化时,抛出该异常。
InterruptedException一个线程被另一个线程中断,抛出该异常。
NoSuchFieldException请求的变量不存在
NoSuchMethodException请求的方法不存在
IOException及其子类对文件或流的操作有误时,抛出异常
......

开始你的任务吧,祝你成功!

package step2;

import java.util.Scanner;

public class Task {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int num1 = sc.nextInt();
		int num2 = sc.nextInt();
		/********* Begin *********/
		try{
		System.out.println(num1/num2);
		}
		catch(Exception e) {
			System.out.println("除数不能为0");
		}
		//这相当于if else分支语句吗,
		
		/********* End *********/
	}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在第2中,我们学习了异常捕获与处理,这是编程中非常重要的一部分。在文本统计的任务中,我们需要对输入的文本进行处理,但是有时候会出现一些异常情况,比如输入的文件不存在、读取文件时出现错误等等。这时候我们就需要使用异常处理来避免程序崩溃,保证程序的稳定性和可靠性。在处理异常时,我们可以使用try-except语句来捕获异常并进行相应的处理,比如输出错误信息、重新输入文件名等等。掌握异常处理技巧可以帮助我们更好地编写程序,提高程序的健壮性和可维护性。 ### 回答2: 本任务要求我们完成一个文本统计程序,能够读取指定的文本文件并统计其中不同单词的出现次数,然后将结果输出至另一个文本文件中。但是,在实际的编写过程中,我们不可避免地会遇到各种异常情况,例如不能读取指定的文件、文件格式不正确、文件中包含不支持的字符等等。因此,在本中我们需要学会如何对这些异常情况进行捕获和处理,保证程序的鲁棒性和健壮性。 具体来说,在处理文件读取异常方面,我们可以使用try-except语句来捕获相应的异常,并对异常情况进行适当处理,例如输出错误信息、跳过该文件并记录异常信息等。在处理文件格式异常方面,我们可以使用正则表达式等方法对文本进行预处理,去除不支持的字符或格式不正确的单词,避免出现统计错误的情况。另外,在统计过程中,我们还需要考虑不同字符串之间的分隔方式(如空格、标点符号等),避免出现重复计算或漏计的情况。 最终,通过对异常情况的合理捕获与处理,我们可以保障文本统计程序的正确性和正确性,避免因为输入文件异常而导致的程序崩溃或数据错误,从而提高程序的可靠性和实用性。 ### 回答3: 本主要是让学习者掌握异常捕获与处理技能,同时通过文本统计的实践,加深对Python基础知识的理解和应用能力。 对于异常捕获与处理,我们需要了解Python中的try...except...语句,它的作用是在try代码块执行时捕获异常,并根据异常类型进行相应的处理,从而保证程序不会因为异常而崩溃。当try代码块中发生异常时,异常会被捕获并抛出一个相应的异常对象,这时我们可以用except语句将其捕获并进行处理,如果没有遇到异常,则执行else语句块中的语句。 在本的文本统计实践中,我们需要对一段英文文本进行单词统计,并找出出现次数最多的单词。具体思路是将整段文本转化为一个由单词构成的列表,然后通过字典的键值对来统计每个单词出现的次数,并通过sorted函数和lambda表达式来排序,最终找出出现次数最多的单词。 然而,在实践中也有可能遇到异常,比如文本中可能存在一些非法字符或空格,这时就需要使用异常处理机制来解决问题。我们可以在try块中尝试执行数据处理代码,如果遇到异常,则会抛出相应的异常对象,这时我们可以将异常捕获并进行处理,比如输出错误信息或重新输入正确的文本。 总之,掌握异常捕获与处理技能是Python编程不可或缺的一部分,它能大大提高程序的健壮性和可靠性。而通过实践文本统计这个项目,不仅加深了对Python语言的理解和掌握程度,同时也增强了自己的编程能力和解决问题的能力。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值