1. 程式人生 > >計算機17-1,2 異常

計算機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));
	}
}