計算機17-1,2 異常

一、編程題

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));
	}
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章