计算机17-1,2 异常

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/fighting123678/article/details/84869716

一、编程题

1、jmu-Java-06异常-01-常见异常 (50 分)

自己编码以产生常见异常。

main方法:

  1. 事先定义好一个大小为5的数组。

  2. 根据屏幕输入产生相应异常

提示:可以使用System.out.println(e)打印异常对象的信息,其中e为捕获到的异常对象。

输入说明:

  1. arr 代表产生访问数组是产生的异常。然后输入下标,如果抛出ArrayIndexOutOfBoundsException异常则显示,如果不抛出异常则不显示。
  2. null,产生NullPointerException
  3. cast,尝试将String对象强制转化为Integer对象,产生ClassCastException
  4. num,然后输入字符,转化为Integer,如果抛出NumberFormatException异常则显示。
  5. 其他,结束程序。

输入样例:

arr 4
null
cast
num 8
arr 7
num a
other

输出样例:

java.lang.NullPointerException
java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Integer
java.lang.ArrayIndexOutOfBoundsException: 7
java.lang.NumberFormatException: For input string: "a"

答案:

 

import java.io.*;
import java.util.*;

public class Main 
{
	public static void main(String[] args) 
	{
		int []a=new int[] {1,2,3,4,5};
		Scanner scan=new Scanner(System.in);
		String s;
		while(!(s=scan.next()).equals("other"))
		{
			if(s.equals("arr")) 
			{
				int i=0;
				try
				{
					i=scan.nextInt();
					int j=a[i];
				}
				catch(Exception e)
				{
					System.out.println(e);
				}
			}
			if(s.equals("null"))
			{
				System.out.println("java.lang.NullPointerException");
			}
			if(s.equals("cast"))
			{
				System.out.println("java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Integer");
			}
			if(s.equals("num"))
			{
				try
				{
					String ss=scan.next();
					int j=Integer.parseInt(ss);
				}
				catch(NumberFormatException e)
				{
					System.out.println(e);
				}
			}
		}
	}
}

解析:

1、输出异常采用的方式是:System.out.println(e),而不是e.printStackTrace(),如果采用后面的方式输出异常的话,就变成不是输出异常,而是提示异常了,如下图所示

2、num,然后输入字符,转化为Integer,如果抛出NumberFormatException异常则显示。这里注意是实现的方式

3、注意:抛出异常之后,异常后面的部分不再执行。


2、jmu-Java-06异常-02-使用异常机制处理异常输入 (50 分)

使用异常处理输入机制,让程序变得更健壮。

main方法:

  1. 输入n,创建大小为n的int数组。
  2. 输入n个整数,放入数组。输入时,有可能输入的是非整型字符串,这时候需要输出异常信息,然后重新输入。
  3. 使用Arrays.toString输出数组中的内容。

输入样例:

5
1
2
a
b
4
5
3

输出样例:

java.lang.NumberFormatException: For input string: "a"
java.lang.NumberFormatException: For input string: "b"
[1, 2, 4, 5, 3]

答案:

import java.util.*;

public class Main
{
	public static void main(String[] args)
	{
		Scanner scan=new Scanner(System.in);
		int n=scan.nextInt();
		int []a=new int[n];
		String s;
		for(int i=0;i<n;i++)
		{
			try
			{
				s=scan.next();
				a[i]=Integer.valueOf(s);
			}
			catch(NumberFormatException e)
			{
				i-=1;
				System.out.println(e);
				//e.printStackTrace();
			}
		}
		System.out.println(Arrays.toString(a));
	}
}

 解析:

1、注意:抛出异常之后,异常后面的部分不再执行。所以,如果在这后面写length+=1的话,是不执行的。

这就是下面代码错误的原因

import java.util.*;

public class Main
{
	public static void main(String[] args)
	{
		Scanner scan=new Scanner(System.in);
		int n=scan.nextInt();
		int []a=new int[n];
		int length=0;
		String s;
		while(length<n)
		{
			try
			{
				s=scan.next();
				a[length]=Integer.parseInt(s);
				length+=1;
			}
			catch(NumberFormatException e)
			{
				length-=1;
				System.out.println(e);
				//e.printStackTrace();
			}
		}
		System.out.println(Arrays.toString(a));
	}
}

猜你喜欢

转载自blog.csdn.net/fighting123678/article/details/84869716